- 有同学反馈,声音比较小
- 有些环节比较乱,不懂(课程是大家对于身份认证和访问授权没有区分开)
HTTP API 身份验证和授权 本文分享自微信公众号 - 万少波的播客(Tinywanblog)
- 官方-Model语法
- 仔细研究一下官方的model语法
- 需要注意的事项
[request_definition]
r = sub, obj, act
[policy_definition]
p = sub, obj, act
[role_definition]
g = _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
p, alice, data1, read
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write
g, alice, data2_admin
1、两个用户 alice 和 bob 2、一个角色 data2_admin 3、用户 alice 继承 data2_admin
alice, data2, read
true
1、添加策略
Casbin::addPermissionForUser('alice', 'data1', 'read');
Casbin::addPermissionForUser('bob', 'data2', 'write');
// var_dump(Casbin::addPermissionForUser('alice', 'data1', 'read'));
// var_dump(Casbin::addPermissionForUser('bob', 'data2', 'write'));
2、给 data2_admin 角色分配权限
Casbin::addPermissionForUser('data2_admin', 'data2', 'read');
Casbin::addPermissionForUser('data2_admin', 'data2', 'write');
// var_dump(Casbin::addPermissionForUser('data2_admin', 'data2', 'read'));
// var_dump(Casbin::addPermissionForUser('data2_admin', 'data2', 'write'));
3、给 alice 分配角色 data2_admin
Casbin::addRoleForUser('alice', 'data2_admin');
// var_dump(Casbin::addRoleForUser('alice', 'data2_admin'));
alice 将会拥有的所有 data2_admin 权限
4、分配完角色和权限后,数据库中的策略规则大致如下:(查看数据)
p, alice, data1, read
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write
g, alice, data2_admin
5、验证权限 alice 具有data2_admin 角色,继承data2_admin角色的全部权限.
Casbin::enforce('alice', 'data2', 'read');
// var_dump(Casbin::enforce('alice', 'data2', 'read'));
RBAC 控制管理
// 1、添加策略
// var_dump(Casbin::addPermissionForUser('alice', 'data1', 'read'));
// var_dump(Casbin::addPermissionForUser('bob', 'data2', 'write'));
// 2、给 data2_admin 角色分配权限
// var_dump(Casbin::addPermissionForUser('data2_admin', 'data2', 'read'));
// var_dump(Casbin::addPermissionForUser('data2_admin', 'data2', 'write'));
// 3、给 alice 分配角色 data2_admin
// var_dump(Casbin::addRoleForUser('alice', 'data2_admin'));
// 4、严重权限
// var_dump(Casbin::enforce('alice', 'data2', 'read'));