yii框架中操作RBAC

xiaoxiao2021-02-28  27

基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问),的有前景的代替受到广泛的控制。

这里我使用的是高级版的Yii框架,首先在common文件夹中config文件夹中的main-local.php中加入这段:

'authManager' => [ 'class' => 'yii\rbac\DbManager', 'itemTable' => 'auth_item', 'assignmentTable' => 'auth_assignment', 'itemChildTable' => 'auth_item_child', ], Rbac支持两种类,PhpManager和DbManager,这里我使用的是DbManager,是对数据库进行的操作,使用PhpManager操作需要在backend文件夹中创建rbac文件夹创建items.php进行操作。 框架中只需要进入Cmd到框架根目录输入:yii migrate(运行这个命令,生成user表), yii migrate - -migrationPath=@yii/rbac/migrations/ (运行此命令生成权限数据表) 下面这个控制器的几个动作方法,完成典型的CURD操作:

准备一:

<?php use Yii; use yii\web\Controller; use yii\filters\VerbFilter; use yii\filters\AccessControl; class PostController extends Controller { public function actionAdd() { return $this->renderContent('添加'); } public function actionDelete() { return $this->renderContent('删除'); } public function actionUpdate() { return $this->renderContent('更新'); } public function actionSelect() { return $this->renderContent('查询'); }}

准备二:

创建几个用户,便于分配不同的角色,进行访问权限测试,采用yii框架生成的user表结构,创建用户可以在yii框架?r=site/signup中创建,注册成功后在?r=site/login中去登录。

管理角色

/** * 添加角色 */ public function actionAdd_role() { // 获取authMananger组件对象 $auth = \Yii::$app->authManager; // 增加3个角色 $goods = $auth->createRole('商品管理员'); $auth->add($goods); $brand = $auth->createRole('品牌管理员'); $auth->add($brand); $sku = $auth->createRole('SKU管理员'); $auth->add($sku); //$auth->remove($goods);//这个是删除角色 } 执行后会自动添加到数据库中的auth_item表中

为用户赋予角色

/** * 给用户赋角色 */ public function actionAdd_user_role() { // 获取authMananger组件对象 $auth = \Yii::$app->authManager; $goods = $auth->createRole('商品管理员'); $brand = $auth->createRole('品牌管理员'); $sku = $auth->createRole('SKU管理员'); //第一个参数角色,第二个参数为用户ID $auth->assign($sku, 1); $auth->assign($goods, 1); $auth->assign($brand, 1); } 执行后会在auth_assignment表中生成如下数据:

增加权限

$add = $auth->createPermission('Add');//方法名 $add->description = '添加操作';//方法名称 $auth->add($add);//添加 $update = $auth->createPermission('Update'); $update->description = '修改操作'; $auth->add($update); $select = $auth->createPermission('Select'); $select->description = '查询操作'; $auth->add($select); $delete = $auth->createPermission('Delete'); $delete->description = '删除操作'; $auth->add($delete); 执行这个会在数据库中的auth_item表中生成权限:

为角色赋予权限

$auth = Yii::$app->authManager; $auth->addChild($goodsMan,$add);//商品管理员 添加权限 $auth->addChild($goodsMan,$delete);//商品管理员 删除 $auth->addChild($brandMan,$select);//品牌管理员 查询 $auth->addChild($brandMan,$update);//品牌管理员 修改 这个添加会在数据库中的auth_item_child表生成 以下这个方法实现的是在执行方法之前运行此方法,在if判断中国需要把获取到的方法首字母转换为大写: public function beforeAction($action) { $user = Yii::$app->user; if (!$user->can(ucfirst($action->id))) { echo "您暂时没有访问该方法的权限";exit(); } return true; }

转载请注明原文地址: https://www.6miu.com/read-1650045.html

最新回复(0)