【发布时间】:2015-09-08 07:43:28
【问题描述】:
我正在尝试按照 Yii 网站上的教程* 在我的项目中实施 RBAC。但是,当我尝试按组实现权限时我很困惑。
对于这个例子,我在用户表中添加了一个group 字段并定义了两个组,user (2) 和admin (1)。
然后我创建了一个控制台命令,如下所示:
class RbacController extends Controller
{
public function actionInit()
{
$auth = \Yii::$app->authManager;
$rule = new \app\rbac\UserGroupRule;
$auth->add($rule);
$search = $auth->createPermission('search');
$search->description = 'Search';
$search->ruleName = $rule->name;
$auth->add($search);
$user = $auth->createRole('user');
$user->ruleName = $rule->name;
$auth->add($user);
$admin = $auth->createRole('admin');
$admin->ruleName = $rule->name;
$auth->add($admin);
$auth->addChild($admin, $user);
}
}
我有这个文件:rbac/UserGroupRule.php
class UserGroupRule extends Rule
{
public $name = 'userGroup';
public function execute($user, $item, $params)
{
// return true; // force return to true for test
if(!Yii::$app->user->isGuest) {
$group = Yii::$app->user->identity->group;
if($item->name === 'search') {
return $group == 1;
}
return false;
}
}
我正在尝试使用if(\Yii::$app->user->can('search')) 测试权限。
首先,我想知道为什么这里需要控制台命令,因为我看不到它在哪里使用。
execute方法中的$item参数的值是
search,但是教程显示它期望这个值是角色类型。不管我在execute方法中返回什么,似乎都返回false。
谁能回答这些问题?
【问题讨论】: