您的位置:首页 > 编程语言 > PHP开发

Yii2-权限控制RBAC-实例篇(三)

2016-02-24 21:05 711 查看
思路解说:

首先,我们约定以Controller/Action这样的格式作为有效的权限名称,直接将权限赋给用户,最后在can这个方法中做校验。为了不破坏源码,我们可以在ActiveRecord之前加一层基础控制器BaseController,普通控制器继承BaseController。

方案一

创建权限:

那么我们建立对应的权限数据(如何创建在RBAC第二篇中已经详细讲解)

权限post/detail:文章详情页的权限



权限赋给用户:

将权限直接赋给用户(此处用户ID为1)



检测权限:

在基础控制器中的beforeAction中验证权限:

public function beforeAction($action)
{
if (!parent::beforeAction($action)) {
return false;
}

$controller = Yii::$app->controller->id;
$action = Yii::$app->controller->action->id;
$permissionName = $controller.'/'.$action;
if(!\Yii::$app->user->can($permissionName) && Yii::$app->getErrorHandler()->exception === null){
throw new \yii\web\UnauthorizedHttpException('对不起,您现在还没获此操作的权限');
}
return true;
}

注意:

Yii::$app->getErrorHandler()->exception === null

这个必须要加,不然会报错,至于为什么就不多说了,简称一言难尽,V_V

方案二(代码就不赘述了跟上面差不多)

权限赋给角色,角色赋给用户

创建角色:



还是之前的权限[post/detail],去掉权限和用户关联,添加权限和角色的上下级关联



将角色赋给用户



检测权限

效果于上面保持一致
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: