Yii2-权限控制RBAC实战篇(一)

基本权限生成和给予。

1.首先再web配置里开启数据库管理权限,

 

  'components' => [
        'authManager' => [
            'class' => 'yii\rbac\DbManager', //用数据库管理RBAC
        ],

2.然后再拓展第三方插件中找到文件夹


    复制里面代码到数据库中生成四张表

3.为重要步骤,创建行为前事件PermissionBehavior.php

namespace app\components\behavior;
 
use Yii;
use yii\base\Behavior;
use yii\web\Controller;
use yii\web\ForbiddenHttpException;
 
class PermissionBehavior extends Behavior
{
 
public $actions = [];

public function events()
{
return [
Controller::EVENT_BEFORE_ACTION => 'beforeAction',
];
}

/**
 * 
 * @param \yii\base\ActionEvent $event
 * @throws ForbiddenHttpException
 * @return boolean
 */
public function beforeAction($event)
    {
     $controller = $event->action->controller->id; //获取到控制器
     $action = $event->action->id; //获取到action
     
     //验证权限
     $access = $controller."::".$action;  //权限name
     
     /* @var yii\rbac\DbManager $auth*/
     $auth = Yii::$app->authManager;
     
     //这一步在权限表中添加默认权限,和默认用户id给许可
     if (!$a=$auth->getPermission($access)) {
      $a = $auth->createPermission($access);
      $a->description = '创建了 ' .$access. ' 许可';
      $auth->add($a);
      $auth->assign($a, Yii::$app->user->id); //添加许可
     }
 
     
     
     //超级管理员不需要验证权限 ,以后这里可以添加不需要验证的用户
     //if (Yii::$app->user->id==1) return true;
     
     if (!Yii::$app->user->can($access)) {
      throw new ForbiddenHttpException(Yii::t('yii', 'You are not allowed to perform this action.'));
     }
     
     return true;
 
    }
}

    4.最后是怎么使用行为前事件PermissionBehavior.php,这样你可以点击你所有控制器方法页面,便可以自动生成权限,不必手动添加,好处就是规范不易出现手动输入的错误

 /* 使用方法如下 ,在某个控制器Xxx中植入 
class XxxController extends Controller
{
    public function behaviors()
    {
        return [
            \app\components\behavior\PermissionBehavior::className(), 
            ....
        ];
    }
 
    ......
}
 * 
 */

5.具体四张表的mvc等下次更新......



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值