【问题标题】:Admin user role in nodejsnodejs中的管理员用户角色
【发布时间】:2016-01-24 21:17:41
【问题描述】:

我的网络应用需要 2 个用户角色(用户和管理员)。我为此使用护照本地身份验证。

现在通过添加下面的代码,我有 2 个角色,但管理员的角色也可以访问用户路由。我必须手动前往 /admin 路线才能使用它的功能。

function isLoggedIn(req, res, next) {
if (req.isAuthenticated())
    return next();
res.redirect('/login');
}

function isAdmin(req, res, next) {
if (req.isAuthenticated()) {
    if (req.user.local.role == "admin") {
        return next();
    }
}
res.redirect('/login');
}

现在我的问题是如何更改 isAdmin 功能,以便在我以管理员身份登录时立即转到 /admin 路由?

【问题讨论】:

    标签: node.js permissions mongoose roles


    【解决方案1】:

    expressjs 中的用户角色和访问权限。如果您想先创建角色,然后在自己的应用程序上创建权限,我们必须先定义角色,然后为这些角色添加权限

    var acl = require('acl');
    var mongoose = require('mongoose');
    var config = require('./config');
    
    acl = new acl(new acl.mongodbBackend(mongoose.connection.db, config.db.aclCollectionPrefix), { debug: function(string) { console.log(string); } });
    
    module.exports = {
        init: function() {
            acl.addRoleParents('superAdmin', 'admin');
            acl.addRoleParents('admin', 'user');
            acl.allow([
                {
                    roles: ['admin'],
                    allows: [
                        {
                            resources: '/user/list',
                            permissions: 'get'
                        }
                    ]
                },
                {
                    roles: ['superAdmin'],
                    allows: [
                        {
                            resources: '/admin/list',
                            permissions: 'get'
                        }
                    ]
                }
            ]);
        },
    
        getAcl: function() {
            return acl;
        }
    };
    

    这里是我的 config 文件,它定义了我的 mongo 连接和 acl 前缀。在我们想要定义可能对这些路由设置权限的路由之后。

    要在 admin.js 文件中添加这些行

    var acl = require('../authorization').getAcl();
    
    // protected URLs
    router.get('/list', acl.middleware(2, userController.getUserId), adminController.list.get);
    

    【讨论】:

      【解决方案2】:

      您无需更改“isAdmin”功能!使用这样的东西:

      app.get('/admin-page', isAdmin, function(req, res) {
          res.render('admin', {         //'admin' is your admin template
              user : req.user 
             // or any other data you want to render! 
          });
      });
      

      【讨论】:

      • 我实际上已经这样做了,但是当我使用管理员帐户登录时,它也可以访问用户路由。无论如何,谢谢!
      • Admin 显然可以访问用户路由......您在“isLoggedIn”中无处阻止管理员访问。这些路由函数定义了作为地址调用时的行为。对于重定向,在需要时使用“res.redirect(..)”!请清楚地说明您的要求以及完整的代码!
      猜你喜欢
      • 2018-10-26
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 2011-01-05
      • 1970-01-01
      • 2016-12-17
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多