yii框架中操作RBAC

基于角色的权限访问控制(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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值