$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 之类的) 设置为钥匙(权限名称)。
这样,当你访问某个控制器时,没钥匙,就会提示权限不足。
建议多结合框架进行测试,验证之后 心里就有底了 😉
createPost 就是一个 Permission 的名字而已
可以用控制器和方法名结合!仅仅是一个名称而已,只要你知道他是表示那个控制器那个方法就可以了。
$createPost 的值可以是角色可以是权限可以是url路由,保存在auth_item表里,其中的name是PRIMARY,不能重复
嗯嗯。平时可以多看看库名和代码的联系