我目前正在学习MEAN堆栈,开发一个简单的TODO应用程序,并希望为此实现基于角色的访问控制(RBAC)。我怎么设置角色
我想要3个角色(角色可能看起来很有趣,但这纯粹是为了学习):
GOD-类似于超级管理员,可以在应用程序中做任何事情。C, R, U, D权限适用于TODO和其他用户。可以创建一个TODO
超级英雄——类似于管理员,有超能力在他的个人数据上做任何事情——对于TODO来说。无法创建任何用户。只能阅读
男人-只能阅读并添加注释到分配给他/她的TODO。
总而言之:
上帝-C,R,U,D[全球级别]超级英雄-C,R,U,D[私人]R,U[分配给他]男人-R,U[分配给他]
我知道我需要有用户
可能的方法-
{
_id : "email@mail.com",
name: "lorem ipsum",
role: "MAN"
}
正如你的帖子所描述的,只有上帝才能创造和分配托多。角色集合可能包含以下内容:
{
_id : "MAN",
globalPerm: [],
privatePerm: [],
assignedPerm: ["r","u"],
},
{
_id : "SUPER_HERO",
globalPerm: [],
privatePerm: ["c","r","u","d"],
assignedPerm: ["c","r","u","d"],
},
{
_id : "GOD",
globalPerm: ["c","r","u","d"],
privatePerm: ["c","r","u","d"],
assignedPerm: ["c","r","u","d"],
}
节点JS中间件在获得用户的正确权限值后,您可能想要使用中间件。示例快速HTTP请求路由:
app.post('/updateTodo', permissions.check('privatePerm', 'c'), function (req, res) {
// do stuff
};
在实际执行函数体之前调用permissions.check来更新TODO。
因此,如果用户试图更新一个todo,它将首先验证相应的权限。
这是一个非常广泛的问题,可以通过多种方式解决。
您已经添加了您使用的是MEAN stack,因此我的问题仅限于此。
在整个问题中,您没有包括的一件事是您使用的是什么样的身份验证体系结构。假设您正在使用基于令牌的身份验证,现在人们通常使用它。
我们有3类用户。您也可以使用不同的选项来区分令牌的类型。
>
加密令牌将具有用户类型等。(这将派上用场,如果你不需要在后端存储令牌,你可以只解密和检查)
现在,在允许任何用户进入用户特定的路由之前,请确保首先检查令牌。
示例
app.post('/godlevelroute', godtokencheck, callrouteandfunction);
app.post('/superherolevelroute', superheroroute, callrouteandfunction);
您必须从angular向标头中发送令牌,然后您可以从标头中取出数据,然后您可以检查该特定用户是否具有通过该路由的权限。
假设一个god级别的用户登录后,他将随身携带godleveltoken,在允许他访问该路由之前,我们将首先进行检查,否则您可以显示错误消息。
这可以是服务器端上的示例令牌检查html" target="_blank">功能
function checkToken(req, res, next) {
var token = req.headers['accesstoken']; //access token from header
//now depending upon which system you are following you can run a check
};
节点模块建议:https://www.npmjs.com/package/jsonwebtoken
现在进入前端部分。您正在使用angular,根据您所写的内容,您可以在显示任何页面之前截取令牌。
你可以通过这个博客得到我试图解释的图片。点击这里
我喜欢给角色起名字上帝超级英雄
由于您正在使用MEAN堆栈,并且许多路由验证发生在节点上,我更喜欢保持角色表简单。
角色:
{
_id : 1,
name : GOD,
golbalPerms : true
},
{
_id : 2,
name : SUPER HERO,
privatePerms : true
},
{
_id : 3,
name : MAN
}
用户:
{
_id : 111,
name : Jesus,
roleId : 1
},
{
_id : 222,
name : BatMan,
roleId : 2
},
{
_id : 333,
name : Jack,
roleId : 3
}
当用户登录并将user
对象发送回客户端时,请确保将roleId
替换为数据库中相应的role
对象。
来看看节点JS上的代码:
通过完全理解您的用例,我们可以将它们分为以下方法-
>
CreateUser
创建
删除TODO
自述
评论
转让
让我们一步一步走,CreateUser。
路由代码段:
app.all('/users', users.requiresLogin);
// Users Routes
app.route('/users')
.post(users.hasPerms('globalPerms'), users.create);
在您的控制器中,您可以基于输入进行验证,如果已验证,则允许通过调用next()
elsereturn
创建用户,并显示相应的错误消息。
现在创建TODO
他们两人几乎都用一个小技巧在相同的逻辑上工作。
路由代码段:
app.all('/todos', users.requiresLogin);
// Users Routes
app.route('/todos')
.post(users.hasPerms('globalPerms','privatePerms'), todos.create);
.delete(users.hasPerms('globalPerms','privatePerms'), todos.delete);
对于创建一个Todo,globalPerms
与上帝同在
这里的技巧将在todos.delete
方法中,只需确保user.id===todos.createById
否则SUPER HERO可能会继续删除GOD创建的Todos。
阅读待办事项:
当一个TODO被创建时,它应该有一个createById
存储同样当一个TODO被分配给某人时,那么assignedTo
和assignedBy
也应该被记录。
这使得许多其他操作易于处理。
用户。角色全球术语
——把托多的所有数据都交给上帝。
用户。角色privatePerms
-提供由他/她创建或分配给他/她的TODO。
user.role.globalPerms
更新
这完全是ReadTODO做DIY的复制品
最后一个,分配TODO:
简单的一个,loggedInUser。id==待办事项。createdById
然后他可以将其分配给任何人。
这里要记住两件事:
>
由于分配部分主要发生在你的UI(Angular)前面,我已经给出了检查loggedInUser.id==todos.createdById
的方法。以任何方式登录的用户将通过读取操作查看所有TODO,并可以将其分配给任何他/她喜欢的人。
确保一个超级英雄只能给他自己或其他超级英雄分配任务,或者给一个人分配任务,而不能给上帝。如何在UI前端显示分配给选项超出了这个问题的范围。这只是一个提醒。
希望这是清楚的。
注意:没有必要为角色集合中的人员授予权限
问题内容: 是否可以使用任何基于角色的开源访问控制系统? 问题答案: 布兰登·萨维奇(Brandon Savage)在他的PHP软件包“ ApplicationACL ” 上做了一个演示,该演示可能会或可能不会完成基于角色的访问。PHPGACL可能也能正常工作,但是我不能肯定地告诉您。 但是,我可以告诉您的是Zend Framework 的Zend_ACL组件将执行基于角色的设置(但是您必须子类化
角色定义 [role_definition] 是RBAC角色继承关系的定义。 Casbin 支持 RBAC 系统的多个实例, 例如, 用户可以具有角色及其继承关系, 资源也可以具有角色及其继承关系。 这两个 RBAC 系统不会互相干扰。 此部分是可选的。 如果在模型中不使用 RBAC 角色, 则省略此部分。 [role_definition] g = _, _ g2 = _, _ 上述角色定义表
以下内容是 xingzhou 对 kubernetes 官方文档的翻译,原文地址 https://k8smeetup.github.io/docs/admin/authorization/rbac/ 基于角色的访问控制(Role-Based Access Control, 即”RBAC”)使用”rbac.authorization.k8s.io” API Group实现授权决策,允许管理员通过Ku
一个更友好的域内基于角色的访问控制的API。 这个API是Management API的子集。 RBAC用户可以使用这个API来简化代码。 参考 全局变量 e 是 Enforcer 实例。GoNode.jsPHP.NETRust e, err := NewEnforcer("examples/rbac_model.conf", "examples/rbac_policy.csv") const
我已经开发了应用程序在Node.js.我使用序列化MSSQL和我已经创建了API的我正在消耗API的角。 我想知道的是关于安全性的事情:我已经实现了JWT的身份验证。现在我想实现角色权限管理我的要求是: 一个用户可以有多个角色(管理员、管理员) 角色可以具有多个权限(创建、更新等) 因此,一个用户可以拥有一个或多个角色,一个角色可以拥有一个或多个权限。权限类似于创建记录、删除记录等。用户可以访问他
我正在开发一个mean stack web应用程序,它包含基于登录用户角色的差异访问。有几个不同的角色,如管理员,政府,志愿者等。 1.如何基于角色管理前端? 目前,我正在为每个角色设置全局标志,如isAdmin、is志愿者、isGovt等,并根据其值,使用 这是正确的说法吗。如果不是,请建议处理UI的正确方法。 2.如果用户没有授权,如何管理后端和重定向路由? 目前我正在尝试使用angular权