MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

Express.js/Mongoose उपयोगकर्ता भूमिकाएं और अनुमतियां

मुझे एक समाधान मिल गया है। इस पर लोगों की राय जानना बहुत अच्छा होगा।

मेरे पास एक अनुमति कॉन्फ़िगरेशन ऑब्जेक्ट है जो प्रत्येक भूमिका और उनकी अनुमतियों को परिभाषित करता है।

अनुमतियां कॉन्फिग ऑब्जेक्ट

roles.admin = {
    id: "admin",
    name: "Admin",
    description: "",
    resource : [
        {
            id : 'blog', 
            permissions: ['create', 'read', 'update', 'delete']
        },
        {
            id : 'user',
            permissions: ['create', 'read', 'update', 'delete']
        },
        {
            id : 'journal',
            permissions: ['create', 'read', 'update', 'delete']
        },

    ]
};

roles.editor = {
    id: "editor",
    name: "Editor",
    description: "",
    resource : [
        {
            id : 'blog', 
            permissions: ['create', 'read', 'update', 'delete']
        },
        {
            id : 'user',
            permissions: ['read']
        },
        {
            id : 'journal',
            permissions: ['create', 'read', 'update']
        },

    ]
};

मिडलवेयर फ़ंक्शन

var roles = require('./config');


var permissions = (function () {

  var getRoles = function (role) {

    var rolesArr = [];

    if (typeof role === 'object' && Array.isArray(role)) {

        // Returns selected roles   
        for (var i = 0, len = role.length; i < len; i++) {
            rolesArr.push(roles[role[i]]);
        };
        return rolesArr;

    } else if (typeof role === 'string' || !role) {

        // Returns all roles
        if (!role) {
            for (var role in roles) {
                rolesArr.push(roles[role]);
            };
        }   

        // Returns single role
        rolesArr.push(roles[role]);
        return rolesArr;

    }

},
check = function (action, resource, loginRequired) {

    return function(req, res, next) {

        var isAuth = req.isAuthenticated();

        // If user is required to be logged in & isn't
        if (loginRequired  && !isAuth) {
            return next(new Error("You must be logged in to view this area"));
        }

        if (isAuth || !loginRequired) {

            var authRole = isAuth ? req.user.role : 'user', 
                role =  get(authRole),
                hasPermission = false;

            (function () {
                for (var i = 0, len = role[0].resource.length; i < len; i++){
                    if (role[0].resource[i].id === resource && role[0].resource[i].permissions.indexOf(action) !== -1) {
                        hasPermission = true;
                        return;
                    }
                };
            })();

            if (hasPermission) {
                next();
            } else {
                return next(new Error("You are trying to " + action + " a " + resource + " and do not have the correct permissions."));
            }

        }
    }
}

return {
    get : function (role) {

        var roles = getRoles(role);

        return roles;
    },
    check : function (action, resource, loginRequired) {
        return check(action, resource, loginRequired);
    }
}

})();

module.exports = permissions;

तब मैंने एक मिडलवेयर फ़ंक्शन बनाया, जब चेक विधि को कॉल किया जाता है, यह उपयोगकर्ताओं की भूमिका req . से प्राप्त करता है वस्तु (req.user.role)। इसके बाद यह मिडलवेयर को दिए गए पैरा को देखता है और अनुमतियां कॉन्फिगर ऑब्जेक्ट में उन लोगों के साथ क्रॉस रेफरेंस करता है।

मिडलवेयर के साथ मार्ग

app.get('/journal', `**permissions.check('read', 'journal')**`, function (req, res) {
     // do stuff
};


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. एक MongoDB अभिव्यक्ति में $ मौजूद है का उपयोग करना

  2. PyMongo और Flask's Jsonify में एस्केप स्लैश शामिल हैं

  3. नेवला 'स्थिर' तरीके बनाम 'उदाहरण' तरीके

  4. मोंगोडब में, मैं केवल द्वितीयक नोड (प्रतिकृति-सेट) में संग्रह (ओं) में फ़ील्ड पर इंडेक्स कैसे कर सकता हूं

  5. कमांड लाइन से MongoDB में डेटाबेस कैसे छोड़ें