Role-based Access Control (RBAC) এবং Authorization গাইড ও নোট

Web Development - মিনজেএস (MeanJS) - User Authentication এবং Authorization
256

Role-based Access Control (RBAC) এবং Authorization ওয়েব অ্যাপ্লিকেশনে নিরাপত্তা ব্যবস্থার গুরুত্বপূর্ণ উপাদান। MeanJS ব্যবহার করে সহজেই RBAC ইমপ্লিমেন্ট করা যায়। এতে ব্যবহারকারীর বিভিন্ন রোলের ওপর ভিত্তি করে অ্যাপ্লিকেশন এর বিভিন্ন অংশে অ্যাক্সেস নিয়ন্ত্রণ করা হয়।

এখানে, আমরা দেখবো কিভাবে RBAC এবং Authorization MeanJS অ্যাপ্লিকেশনে ইমপ্লিমেন্ট করা যায়।


RBAC এবং Authorization কী?

  • RBAC (Role-based Access Control) হল একটি সিস্টেম যেখানে ব্যবহারকারীর বিভিন্ন রোলের ওপর ভিত্তি করে অ্যাপ্লিকেশনের অংশগুলিতে অ্যাক্সেস নিয়ন্ত্রণ করা হয়।
  • Authorization হল একটি প্রক্রিয়া যা নিশ্চিত করে যে একটি ব্যবহারকারী শুধুমাত্র অনুমোদিত রিসোর্স বা কার্যকলাপে অ্যাক্সেস পায়।

MeanJS এ RBAC এবং Authorization ইমপ্লিমেন্টেশন

MeanJS অ্যাপ্লিকেশনে RBAC সেটআপ করার জন্য নিম্নলিখিত পদক্ষেপ অনুসরণ করা হয়:


১. ব্যবহারকারী মডেল এবং রোল ফিল্ড তৈরি করা

প্রথমে, একটি User মডেল তৈরি করা হবে যেখানে ব্যবহারকারীর রোল সংরক্ষিত থাকবে। এর মাধ্যমে নির্ধারণ করা যাবে যে, কোন ব্যবহারকারী কোন ধরনের অ্যাক্সেস পাবে।

user.model.js

'use strict';

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

// User Schema তৈরি করা
var UserSchema = new Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        unique: true,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    roles: {
        type: [String],  // ব্যবহারকারী একাধিক রোল ধারণ করতে পারে
        default: ['user'],  // ডিফল্ট রোল 'user'
        enum: ['user', 'admin', 'moderator']  // রোলের সীমা
    }
});

// মডেল তৈরি করা
var User = mongoose.model('User', UserSchema);

module.exports = User;

এখানে, roles ফিল্ডটি ব্যবহারকারীর রোল সংরক্ষণ করবে, এবং ব্যবহারকারী একাধিক রোল পেতে পারে (যেমন user, admin, বা moderator)।


২. Role-based Access Control (RBAC) Middleware তৈরি করা

এখন, একটি middleware তৈরি করতে হবে যা অ্যাক্সেস নিয়ন্ত্রণ করবে। এই middleware এর মাধ্যমে আমরা চেক করতে পারবো যে, কোন ব্যবহারকারী নির্দিষ্ট রোল ছাড়া অ্যাক্সেস করার চেষ্টা করছে কি না।

rbac.middleware.js

'use strict';

var User = require('../models/user.model');  // User মডেলটি আমদানি করা

// RBAC Middleware - রোল যাচাই করা
exports.hasRole = function(requiredRole) {
    return function(req, res, next) {
        if (req.user && req.user.roles && req.user.roles.includes(requiredRole)) {
            return next();  // রোল মিলে গেলে পরবর্তী প্রসেসে যাবে
        } else {
            return res.status(403).send({ message: 'You do not have permission to access this resource.' });  // অনুমতি না থাকলে 403 রেসপন্স
        }
    };
};

এখানে, hasRole ফাংশনটি একটি নির্দিষ্ট রোল যাচাই করবে এবং যদি ব্যবহারকারীর রোল মিলে যায়, তবে অ্যাপ্লিকেশনে সেই রিসোর্স অ্যাক্সেস করা যাবে।


৩. Authorization রাউট এবং RBAC Middleware ব্যবহার করা

এখন, আপনি আপনার রাউটে RBAC middleware ব্যবহার করতে পারেন যাতে রোল চেক করা যায়। নিচে একটি উদাহরণ দেওয়া হলো, যেখানে Admin রোলের জন্য একটি সুরক্ষিত রাউট তৈরি করা হয়েছে।

admin.routes.js

'use strict';

var express = require('express');
var router = express.Router();
var rbacMiddleware = require('../middlewares/rbac.middleware');  // RBAC middleware

// Admin রাউট - এখানে Admin রোল চেক করা হবে
router.get('/admin', rbacMiddleware.hasRole('admin'), function(req, res) {
    res.send({ message: 'Welcome Admin! You have access to this resource.' });
});

module.exports = router;

এখানে, /admin রাউটে শুধুমাত্র Admin রোলের ব্যবহারকারীই অ্যাক্সেস পাবে।


৪. Authentication এবং Authorization যুক্ত করা

RBAC এর সাথে authentication যোগ করা প্রয়োজন। ব্যবহারকারীর login হওয়া নিশ্চিত করে এবং তার পর authorization চেক করা হয়। সাধারণত, JWT (JSON Web Token) ব্যবহার করা হয়।

authentication.controller.js

'use strict';

var jwt = require('jsonwebtoken');
var User = require('../models/user.model');

// লগইন ফাংশন
exports.login = function(req, res) {
    User.findOne({ email: req.body.email })
        .then(user => {
            if (!user || user.password !== req.body.password) {
                return res.status(401).send({ message: 'Invalid credentials.' });
            }

            // JWT টোকেন জেনারেট করা
            var token = jwt.sign({ id: user._id, roles: user.roles }, 'secret_key', { expiresIn: '1h' });
            res.send({ token: token });  // JWT রিটার্ন
        })
        .catch(err => {
            res.status(500).send({ message: 'Server error.' });
        });
};

এখানে, লগইন করার পর, ব্যবহারকারীর রোলের সাথে একটি JWT টোকেন জেনারেট করা হচ্ছে। এই টোকেন পরে ব্যবহারকারীকে তার অ্যাক্সেস অনুমতি দেয়।


৫. Authorization Middleware এবং Token যাচাই করা

এখন, ব্যবহারকারীর JWT টোকেন যাচাই করার জন্য একটি middleware তৈরি করতে হবে। এই middleware ব্যবহারকারীকে সঠিক রোল যাচাই করে অ্যাক্সেস দেওয়ার জন্য ব্যবহৃত হবে।

authorization.middleware.js

'use strict';

var jwt = require('jsonwebtoken');

// JWT টোকেন যাচাই করা
exports.verifyToken = function(req, res, next) {
    var token = req.headers['authorization'];

    if (!token) {
        return res.status(403).send({ message: 'No token provided.' });
    }

    jwt.verify(token, 'secret_key', function(err, decoded) {
        if (err) {
            return res.status(401).send({ message: 'Unauthorized access.' });
        }

        req.user = decoded;  // ইউজারের তথ্য সংরক্ষণ করা
        next();
    });
};

এখানে, verifyToken middleware প্রথমে টোকেন যাচাই করে এবং যদি সঠিক থাকে, তাহলে ব্যবহারকারীর ডেটা req.user তে সেট করা হয়।


৬. সম্পূর্ণ রাউট ও Middleware সংযোগ করা

এখন আপনি RBAC এবং Authorization middleware যুক্ত করে রাউটগুলিতে নিরাপত্তা প্রয়োগ করতে পারেন।

server.js

var express = require('express');
var bodyParser = require('body-parser');
var mongoose = require('mongoose');
var authMiddleware = require('./middlewares/authorization.middleware');
var rbacMiddleware = require('./middlewares/rbac.middleware');
var userRoutes = require('./routes/user.routes');
var adminRoutes = require('./routes/admin.routes');

var app = express();
app.use(bodyParser.json());

// MongoDB কানেকশন
mongoose.connect('mongodb://localhost:27017/meanjs', { useNewUrlParser: true, useUnifiedTopology: true })
    .then(() => console.log('MongoDB connected'))
    .catch(err => console.log('MongoDB connection error:', err));

// Middleware
app.use(authMiddleware.verifyToken);  // Token যাচাই করা

// রাউট
app.use('/api/users', userRoutes);
app.use('/api', adminRoutes);  // Admin রাউট যেখানে RBAC middleware ব্যবহৃত হবে

app.listen(3000, () => {
    console.log('Server running on port 3000');
});

এখানে verifyToken middleware সমস্ত রাউটে ব্যবহৃত হচ্ছে, এবং RBAC middleware শুধুমাত্র admin রাউটে অ্যাক্সেস নিয়ন্ত্রণ করবে।


সারাংশ

RBAC এবং Authorization MeanJS অ্যাপ্লিকেশনে ব্যবহারকারী রোল অনুযায়ী অ্যাক্সেস নিয়ন্ত্রণ করার একটি শক্তিশালী পদ্ধতি। JWT (JSON Web Token) ব্যবহার করে authentication এবং authorization করার মাধ্যমে আপনি নিরাপদ এবং স্কেলেবল অ্যাপ্লিকেশন তৈরি করতে পারেন। RBAC এর মাধ্যমে আপনি কাস্টম রোল তৈরি করে বিভিন্ন অংশের অ্যাক্সেস নিয়ন্ত্রণ করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...