RBAC [ 2.0 版本 ]
$auth = Yii::$app->authManager;
// 添加 "createPost" 权限
$createPost = $auth->createPermission('createPost');
$createPost->description = 'Create a post';
$auth->add($createPost);
// 添加 "updatePost" 权限
$updatePost = $auth->createPermission('updatePost');
$updatePost->description = 'Update post';
$auth->add($updatePost);
// 添加 "author" 角色并赋予 "createPost" 权限
$author = $auth->createRole('author');
$auth->add($author);
$auth->addChild($author, $createPost);
// 添加 "admin" 角色并赋予 "updatePost"
// 和 "author" 权限
$admin = $auth->createRole('admin');
$auth->add($admin);
$auth->addChild($admin, $updatePost);
$auth->addChild($admin, $author);
// 为用户指派角色。其中 1 和 2 是由 IdentityInterface::getId() 返回的id (译者注:user表的id)
// 通常在你的 User 模型中实现这个函数。
$auth->assign($author, 2);
$auth->assign($admin, 1);
上面是权威指南的代码,我想问一下上面写的createPost是指的控制器里的方法还是说控制器,假如说不同的控制器里面的方法名称都差不多或者有重复的怎么办?求大神
最佳答案
-
首先,从思想上不要把RBAC想的太神秘。
说白了,它其实就是类似,你有某个锁的钥匙,然后你才能打开它,一样的道理。
RBAC文档样例中的 createPost 也是一个钥匙。至于锁要放在哪边,就看你的业务逻辑了,可以只用一次 也可以多个地方用一个锁。
由于常见的业务都跟 用户 和 控制器 相关,所以我们才会习惯性的把 控制器路由的路径(比如 /module/controller/action 之类的) 设置为钥匙(权限名称)。
这样,当你访问某个控制器时,没钥匙,就会提示权限不足。建议多结合框架进行测试,验证之后 心里就有底了 ;)
菜鸟鼻涕 觉得很赞
其他 4 个回答
郝立国
注册时间:2017-02-09
最后登录:2024-01-11
在线时长:77小时3分
最后登录:2024-01-11
在线时长:77小时3分
- 粉丝6
- 金钱2925
- 威望110
- 积分4795