Node.js 连接角色:定义登录时的用户角色和User.is函数

Node.js 连接角色:定义登录时的用户角色和User.is函数,node.js,express,Node.js,Express,我尝试使用connectroles(),但我很难定义用户角色并检查它们 问题1 如何保存用户角色,以便连接角色可以访问它 问题2 为什么console.log返回函数而不是true或false 我在服务器中设置passport和connect角色 用户登录时,应将用户权限级别附加到会话 检查路由中的用户级别 在user.is上显示的日志不是true或false 我对这个中间件不太熟悉,但我想我也应该展示如何使用这个库来实现这一点,因为它可能是最接近的具有类似功能的库 下面是如何初始化库,并要求管

我尝试使用connectroles(),但我很难定义用户角色并检查它们

问题1 如何保存用户角色,以便连接角色可以访问它

问题2 为什么console.log返回函数而不是true或false

我在服务器中设置passport和connect角色 用户登录时,应将用户权限级别附加到会话 检查路由中的用户级别 在user.is上显示的日志不是true或false
我对这个中间件不太熟悉,但我想我也应该展示如何使用这个库来实现这一点,因为它可能是最接近的具有类似功能的库

下面是如何初始化库,并要求管理员访问路由

var express = require('express');
var stormpath = require('express-stormpath');

var app = express();

app.use(stormpath.init(app, {
  apiKeyId: 'xxx',
  apiKeySecret: 'yyy',
  application: 'https://api.stormpath.com/v1/applications/xxx'
}));

app.get('/secret', stormpath.groupsRequired(['admins']), function(req, res) {
  res.json({ status: 'you are an admin!' });
});

app.listen(3000);
为了进一步说明,您还可以使用Stormpath创建组。你可以用实际的方式或者通过他们的用户界面来实现。下面是一个代码示例:

var adminsGroup;
app.get('stormpathApplication').createGroup({ name: 'admins' }, function(err, group) {
  adminsGroup = group;
});
然后,在稍后的路线代码中,您可以通过如下方式将用户添加到此组:

app.get('/createAdmin', stormpath.loginRequired, function(req, res) {
  req.user.addGroup(adminsGroup);  // this adds the current user to the admins group
});
代码更改用户对象 我发现仅在connect.roles中定义用户标识符是行不通的。Passport使用一个用户对象,该对象通过
req.user
检索。ID保存在会话中,passport在每个路由上的ID的帮助下检索完整的用户对象。为了方便起见,我将应用程序中的所有用户重命名为其他名称,并使用now
user
而不是
appUser
进行授权

2检查角色 我没有尝试读取我的权限(
permissionLevel
,它保存在我的用户数据库中),而是直接检查我的用户模型中的permissionLevel

在路由中,您必须使用
req.user.is
而不是
user.is

 appUser.use 'superAdmin', (req) ->
  if req.user.permissionLevel == 'superAdmin'
    return true
  return

关于设置用户角色,我也有同样的问题,但我找到了答案

基本上,由于连接角色是一个中间件,因此每个策略都可以访问
req
对象,该对象可能有一个
user
属性,该属性由身份验证库使用数据库(或存储用户数据的任何其他位置)中的数据设置


现在,由于该对象从数据库获取属性和值,您可以向用户添加角色属性,并将其附加到
req
对象。这样,现在您就有了一个属性
req.user.role
,可以在您的策略中使用。

if
groupsRequired
检查您是否是管理员,您在哪里设置该用户是管理员?您可以在UI中创建组,或者实际地说:`req.app.get('stormpathApplication').createGroup({name:'admins'),function(呃,小组){呃——刚刚更新了答案,提供了关于你问题的更多细节。
var express = require('express');
var stormpath = require('express-stormpath');

var app = express();

app.use(stormpath.init(app, {
  apiKeyId: 'xxx',
  apiKeySecret: 'yyy',
  application: 'https://api.stormpath.com/v1/applications/xxx'
}));

app.get('/secret', stormpath.groupsRequired(['admins']), function(req, res) {
  res.json({ status: 'you are an admin!' });
});

app.listen(3000);
var adminsGroup;
app.get('stormpathApplication').createGroup({ name: 'admins' }, function(err, group) {
  adminsGroup = group;
});
app.get('/createAdmin', stormpath.loginRequired, function(req, res) {
  req.user.addGroup(adminsGroup);  // this adds the current user to the admins group
});
 appUser.use 'superAdmin', (req) ->
  if req.user.permissionLevel == 'superAdmin'
    return true
  return