loopback角色访问控制

角色访问

最早了解角色访问控制其实是在学习thinkPHP的时候,了解到RBAC(role based access control),这是一个很实用的功能,比如我们可以限制幂等的API接口可以访问,比如get类的,设置非幂等的接口不能访问,或者仅本人或管理员访问,比如post,put类型的。这样做可以很大程度上控制了接口的安全性。
教程索引:(持续更新)
loopback中文教程

皓眸大前端开发学习

转载请注明出处:http://www.haomou.net/2015/03/24/2015_loopback_acl/

角色

角色这个我就不介绍了,玩过游戏都知道。关于用户角色访问控制,loopback 中角色分为动态角色和静态角色两种。

静态角色

做应用时涉及到用户这一块比较通用的是基于用户角色的访问控制管理,用户分角色,分别管理。下面给出了一个静态创建角色的例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
User.create([
{username: 'John', email: 'john@doe.com', password: 'opensesame'}, {username: 'Jane', email: 'jane@doe.com', password: 'opensesame'}, {username: 'Bob', email: 'bob@projects.com', password: 'opensesame'}
], function(err, users) {

if (err) return cb(err); //create the admin role Role.create({
name: 'admin'
}, function(err, role) {
if (err) cb(err);
//make bob an admin role.principals.create({
principalType: RoleMapping.USER,
principalId: users[2].id
}, function(err, principal) {
cb(err); });
});
});

注意参数不能随便修改。
然后可以在模型 json 文件中配置访问权限:

1
2
3
4
5
6
7
{
"accessType": "EXECUTE",
"principalType": "ROLE",
"principalId": "admin",
"permission": "ALLOW",
"property": "find"
}

然后就可以了,只有 admin 角儿的 user 才可以访问 find 方法。

动态角色

loopback内置了许多动态角色。

1
2
3
4
Role.OWNER,	$owner	Owner of the object
Role.AUTHENTICATED, $authenticated authenticated user
Role.UNAUTHENTICATED, $unauthenticated Unauthenticated user
Role.EVERYONE, $everyone Everyone

我们可以使用这些动态角色来控制api的访问权限,比如配置/common/models/model.json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
"acls": [
{
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "DENY",
"accessType": "WRITE"
},
{
"principalType": "ROLE",
"principalId": "$everyone",
"permission": "ALLOW",
"accessType": "EXECUTE"
},
...
...
]

谢谢!

转载请注明出处:http://www.haomou.net/2015/03/24/2015_loopback_acl/

有问题请留言。T_T 皓眸大前端开发学习 T_T