yii2自带rbac

本文介绍了一个基于Yii2框架实现的角色权限管理系统(RBAC)。该系统包括权限、角色的创建与分配,以及将角色分配给用户的流程。通过表单提交的方式实现了权限与角色的动态增删改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

控制器


<?php
/**
 * Created by PhpStorm.
 * User: 青春已被放纵了
 * Date: 2017/1/13
 * Time: 14:12
 */
namespace backend\controllers;

use yii\web\Controller;
use backend\models\Rbac;
use Yii;
use Db;

class RbacController extends Controller{
    public function actionPower(){
        $model = new Rbac();
        return $this->render("power",['model'=>$model]);
    }

    /**
     * @return \yii\web\Response
     * 创建权限
     */
    public function actionCreate_power(){
        $power = Yii::$app->request->post();
        $item = $power['Rbac']['power'];
        $auth = Yii::$app->authManager;
        $createPost = $auth->createPermission($item);
        $createPost->description = '创建了'.$item .'权限';
        $auth->add($createPost);

        return $this->redirect("?r=rbac/role");
    }

    /**
     * @return string
     *
     */
    public function actionRole(){
        $model = new Rbac();
        return $this->render("role",['model'=>$model]);
    }

    /**
     * @return \yii\web\Response
     * 添加角色
     */
    public function actionCreate_role(){
        $power = Yii::$app->request->post();
        $item = $power['Rbac']['role'];
        $auth = Yii::$app->authManager;
        $role = $auth->createRole($item);
        $role->description = '创建了 ' . $item . ' 角色';
        $auth->add($role);
        return $this->redirect("?r=rbac/role_power");
    }
    public function actionRole_power(){
        $model = new Rbac();
        $role = Yii::$app->db->createCommand("select name from auth_item where type=1")->queryAll();
        foreach ($role as $v){
            $roles[$v['name']]=$v['name'];
        }
        $power = Yii::$app->db->createCommand("select name from auth_item where type=2")->queryAll();
        foreach ($power as $v){
            $powers[$v['name']]=$v['name'];
        }
        return $this->render("role_power",['model'=>$model,'power'=>$powers,'role'=>$roles]);

    }
    public function actionCreate_role_power(){
        $items= Yii::$app->request->post();
        $role = $items['Rbac']['role'];
        foreach($items['Rbac']['power'] as $value ){
            $auth = Yii::$app->authManager;
            $parent = $auth->createRole($role);
            $child = $auth->createPermission($value);
            $auth->addChild($parent, $child);
        }
        return $this->redirect('?r=rbac/fenpei');
    }
    public function actionFenpei(){
        $model = new Rbac();
        $sql = 'select name from auth_item where type=1';
        $role =\Yii::$app->db->createCommand($sql)->queryAll();
        foreach($role as $v){
            $roles[$v['name']] = $v['name'];
        }
        $sql1 = 'select id,username from user';

        $power =\Yii::$app->db->createCommand($sql1)->queryAll();
        foreach($power as $vv){
            $user[$vv['id']] = $vv['username'];
        }
        return $this->render('fenpei',['role'=>$roles,'user'=>$user,'model'=>$model]);
    }
    public function actionCreate_user_role(){
        $items= Yii::$app->request->post();
        $role = $items['Rbac']['user'];
        foreach ($items['Rbac']['role'] as $value) {
            $auth = \Yii::$app->authManager;
            $reader = $auth->createRole($value);
            $auth->assign($reader, $role);
        }
    }
    public function beforeAction($action)
    {
        $action = Yii::$app->controller->action->id;
        if(\Yii::$app->user->can($action)){
            return true;
        }else{
            throw new \yii\web\UnauthorizedHttpException('对不起,您现在还没获此操作的权限');
        }
    }
    public function actionInsert(){
        echo 'insert';
    }
    public function actionDelete(){
        echo 'delete';
    }
    public function actionUpdate(){
        echo 'update';
    }
}



power.php


<?php
/**
 * Created by PhpStorm.
 * User: 青春已被放纵了
 * Date: 2017/1/13
 * Time: 15:41
 */

use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
?>

<?php $form = ActiveForm::begin([
    'id' => 'login-form',
    'options' => ['class' => 'form-horizontal'],
    'action'=>'?r=rbac/create_power',
    'method'=>'post'
]); ?>
<?= $form->field($model, 'power')->textInput()?>
<div class="form-group">
    <?= Html::submitButton('提交', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end() ?>


role.php


<?php
/**
 * Created by PhpStorm.
 * User: 青春已被放纵了
 * Date: 2017/1/13
 * Time: 17:10
 */

use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
?>

<?php $form = ActiveForm::begin([
    'id' => 'login-form',
    'options' => ['class' => 'form-horizontal'],
    'action'=>'?r=rbac/create_role',
    'method'=>'post'
]); ?>
<?= $form->field($model, 'role')->textInput()?>
<div class="form-group">
    <?= Html::submitButton('提交', ['class' => 'btn btn-primary']) ?>
</div>
<?php ActiveForm::end() ?>


fenpei.php


<?php
/**
 * Created by PhpStorm.
 * User: 青春已被放纵了
 * Date: 2017/1/13
 * Time: 17:10
 */
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
?>

<?php $form = ActiveForm::begin([
    'id' => 'login-form',
    'options' => ['class' => 'form-horizontal'],
    'action'=>'?r=rbac/create_user_role',
    'method'=>'post'
]); ?>
<?= $form->field($model,'user')->radioList($user);?>
<?= $form->field($model, 'role[]')->checkboxList($role);?>

    <div class="form-group">
        <?= Html::submitButton('提交', ['class' => 'btn btn-primary']) ?>
    </div>
<?php ActiveForm::end() ?>


fenpei.php



<?php
/**
 * Created by PhpStorm.
 * User: 青春已被放纵了
 * Date: 2017/1/13
 * Time: 17:10
 */
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
?>

<?php $form = ActiveForm::begin([
    'id' => 'login-form',
    'options' => ['class' => 'form-horizontal'],
    'action'=>'?r=rbac/create_role_power',
    'method'=>'post'
]); ?>
<?= $form->field($model, 'role')->radioList($role);?>
<?= $form->field($model, 'power[]')->checkboxList($power);?>

    <div class="form-group">
        <?= Html::submitButton('提交', ['class' => 'btn btn-primary']) ?>
    </div>
<?php ActiveForm::end() ?>



model中
<?php
/**
 * Created by PhpStorm.
 * User: 青春已被放纵了
 * Date: 2017/1/13
 * Time: 15:35
 */
namespace backend\models;

use yii\base\Model;

class Rbac extends Model{
    public $power;
    public $role;
    public $user;


    public function rules(){
        return [
            //填写验证
        ];
    }
    public function attributeLabels(){
        return [
            'power'=>'权限',
            'user'=>'用户',
            'role'=>'角色',
        ];
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值