认证(authentication):指证明身份正确
授权(authorization):指允许某种行为
API可能会对您进行身份验证,但不会授权您发出特定请求。
身份验证是关于验证您的凭据,如用户名/用户ID和密码,以验证您的身份。系统确定您是否就是您所说的使用凭据。在公共和专用网络中,系统通过登录密码验证用户身份。身份验证通常通过用户名和密码完成,有时与身份验证因素结合使用,后者指的是各种身份验证方式。
更多查看:HTTP API 身份验证和授权 本文分享自微信公众号 - 万少波的播客(Tinywanblog)
官方-基于角色的访问控制
RBAC是什么?
官方-RBAC模型编辑器
[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'));
【bilibili视频】ThinkPHP5.1+Casbin权限实战:基于角色的RBAC授权 连接地址:https://www.bilibili.com/video/BV1A541187M4