如何验证RESTful api的授权?

时间:2015-04-13 11:09:36

标签: angularjs node.js rest

我的应用程序使用AngularJs作为前端框架,NodeJs,ExpressJs作为后端框架。他们可以使用RESTful服务相互联系。该应用程序允许用户使用该角色的自定义可访问系统手动创建新角色。

每当AngularJs GET/POST/PUT/DELETE发出$ http请求时,需要验证当前用户是否具有包含所需子系统的角色。

app.post('/api/v1/budgets/upsert', auth.requiresLogin, auth.requiresRoleSubSystem([10, 11, 12, 13]), budgetCtrl.upsertBudget);
// to access this api link, user need to have role contained at least one of a system in the array [10, 11, 12, 13]

正如您所看到的,我有一个中间件auth.requiresRoleSubSystem(subSystemIds)来执行此操作。它没有任何问题,但是,我必须手动设置访问每个api链接所需的子系统ID数组。

如果子系统ID已经改变,那将非常沮丧并且很难。我一直在考虑一些可能的解决方案,但所有解决方案几乎相同,需要手动设置。任何建议都会非常感激。

2 个答案:

答案 0 :(得分:0)

为什么不使用常量而不是id号?因此,您可以轻松地在单个配置文件中修改ID。您甚至可以在服务器上生成该配置文件。

<击> AFAIK。 app.post是从客户端到服务器的请求,因此它是客户端代码。客户端代码不应包含auth逻辑。 REST服务仅返回授权链接。我猜你正在构建一个传统的基于JSON的webapplication而不是REST服务。

答案 1 :(得分:0)

只需在@ inf3rno中添加一个代码:

var Role = new Schema({ 
code: {type: String, index:true},
name: String,
data: {},
active: boolean
});

这样,代码就是一个索引字符串常量(例如ROLE01),然后你就可以在整个系统中映射这个值,尽管_id正在改变。

例如,如果您的用户看起来像这样:

User {
name: String,
roles: [role._id]
}

试着像这样保存它:

User {
name: String,
roles: [role.code]
}

希望它有所帮助!!