Rumah pembangunan bahagian belakang tutorial php yii2 RBAC使用DbManager实现后台权限判断的方法_php实例

yii2 RBAC使用DbManager实现后台权限判断的方法_php实例

Aug 04, 2016 am 08:56 AM
rbac yii2 Belakang pentas

本文实例讲述了yii2 RBAC使用DbManager实现后台权限判断的方法。分享给大家供大家参考,具体如下:

首先根据文档生成yii2 框架中的表

yii migrate --migrationPath=@yii/rbac/migrations/

生成如下4表:

auth_assignment
auth_item_child
auth_item
auth_rule

使用yii的gii快速生成对应的model,但是由于auth_item表同时存储角色跟权限,由于后面我们要分角色跟权限来做curd操作,所以我这里新建了一个RoleForm和PermissionForm两个model来区分开角色与权限。由于角色跟权限紧紧相连,又在auth_item生成的model中多加一个属性$child,后面会用到现在先不管。

下面是角色model的相关代码

<&#63;php
namespace app\models;
use Yii;
use app\models\AuthItem;
use yii\rbac\Item;
/*
 * 角色model
 * 指尖上的艺术家
 */
class RoleForm extends AuthItem
{
  public function init() {
    parent::init();
    $this->type = Item::TYPE_ROLE;//yii-rbac-Role隐藏继承常量这里的值是1
  }
}

Salin selepas log masuk

下面是权限model的相关代码

<&#63;php
namespace app\models;
use Yii;
use app\models\AuthItem;
use yii\rbac\Item;
/*
 * 权限model
 * 指尖上的艺术家
 */
class PermissionForm extends AuthItem
{
  public function init() {
    parent::init();
    $this->type = Item::TYPE_PERMISSION;//常量值 2
  }
}

Salin selepas log masuk

另外在AuthItem模型中增加一个属性

<&#63;php
class AuthItem.....
public $child;//用于角色权限添加
......

Salin selepas log masuk

现在到我们对应的控制器了

首先我们说权限控制器写控制器的时候要用到系统自带的扩展
。。。
use yii\rbac\Permission;
。。。

/*
 * 权限添加
 */
public function actionCreate() {
  $model = new PermissionForm();
  if( $model->load( Yii::$app->request->post() ) && $model->validate() ) {
    //rbac中permission对象
    $permission = new Permission();
    $permission->name = trim( $model->name );
    $permission->type = $model->type;
    //权限添加
    Yii::$app->authManager->add( $permission );
  }
}

Salin selepas log masuk

修改的时候 其他的不变就是换了个方法

/*
 * param string $name 修改的权限名
 * param Object $permission 跟添加一样提交上来的数据
 */
Yii::$app->authManager->update( $name, $permission );

Salin selepas log masuk

这里是删除

//Returns the named permission.
$permission = Yii::$app->authManager->getPermission( $name );
//Removes a permission or rule from the RBAC system.
Yii::$app->authManager->remove( $permission );

Salin selepas log masuk

权限的cud都搞定了,查看就不写了

下面是角色控制器

带上这个

use yii\rbac\Role;
/*
 * 角色添加
 */
public function actionCreate() {
  $model = new RoleForm();
  if ( $model->load( Yii::$app->request->post() ) && $model->validate() ) {
      //实例化角色对象
      $role = new Role();
      $role->name = $model->name;
      $role->type = $model->type;
      //添加角色
      Yii::$app->authManager->add( $role );
  }
  //权限列表( 添加角色的时候我们就可看到当前有没有权限来添加 )
  $permissions = $this->loadPermission();
  //将$model跟$permissions....渲染到视图就好了
}

Salin selepas log masuk
/*
 * 修改
 * param string $name 修改的角色名
 * param Object $role 跟添加一样提交上来的数据
 */
$bool = Yii::$app->authManager->update( $name, $role );

Salin selepas log masuk

删除的时候就比较麻烦了

/*
 * param string $name 角色名
 */
$role = Yii::$app->authManager->getRole( $name );//获取当前角色对象
//Returns the child roles.
$childAll = Yii::$app->authManager->getChildren( $role );
if ( isset($childAll) ) {//逐一删除权限
  foreach ($childAll as $value) {
    //Returns the named permission.
    $perObj = Yii::$app->authManager->getPermission($value);
    //Removes a child from its parent.
    Yii::$app->authManager->removeChild( $role, $perObj );
  }
}
Yii::$app->authManager->remove( $role );//最后删除我们的角色了

Salin selepas log masuk

最最关键的就是我们要给角色赋予权限对吧,如下代码

//当前角色所拥有的权限
$childArray = $this->loadRolePermission( $model->name );//这个就是返回权限数组
if ( !empty( $childArray ) ) {
  $model->child = $childArray;
}
else {
  $model->child = array();
}
//Returns all permissions in the system.
$permissions = Yii::$app->authManager->getPermissions();
$perArr = array();
foreach ($permissions as $key => $value) {
  $perArr[$value->name] = $value->name;
}
if ( $model->load( Yii::$app->request->post() ) && $model->validate() ) {
  //角色对象
  $child = isset( $_POST['AuthItem']['child'] ) &#63; $_POST['AuthItem']['child'] : NULL;
  //表单无法验证child所以当为空的时候跳回原页面
  if ( empty( $child ) ) {
    return $this->redirect(..你们要跳的页面..);
  }
  //判断角色是否分配权限,已分配则删除,反之增加新的
  if ( !empty( $childArray ) ) {
    //Removed all children form their parent.
    $bool = Yii::$app->authManager->removeChildren( $model );
    if ( !$bool ) {
      throw new HttpException(404, '别想糊弄我!凑你一脸~~~');
    }
  }
  //当前角色对象
  $role = Yii::$app->authManager->getRole( $model->name );
  //child权限添加
  if( isset( $child ) ) {
    foreach ( $child as $val) {
      //获取权限
      $childObj = Yii::$app->authManager->getPermission($val);
      //给item_child表写入数据(权限表)
      Yii::$app->authManager->addChild( $role, $childObj );
    }
    return $this->redirect(..你们要跳的页面..);
  }
}

Salin selepas log masuk

最后就是我们最后一个控制器了角色与用户关联

/*
 * 创建角色跟用户之间关联的关键部分代码
 */
//Returns the named role.
$role =Yii::$app->authManager->getRole( $roleName );
// Assigns a role to a user.
Yii::$app->authManager->assign( $role, $userId );<pre name="code" class="php">/*
 * 权限检测
 * param int| string $userId 用户id
 * param string $permission 权限名
 */
Yii::$app->authManager->checkAccess( $userId , $permission ) )

Salin selepas log masuk

下面是判断权限的

/*
 * 权限检测
 * param int| string $userId 用户id
 * param string $permission 权限名
 */
Yii::$app->authManager->checkAccess( $userId , $permission ) )

Salin selepas log masuk

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Discuz penyelesaian masalah log masuk latar belakang didedahkan Discuz penyelesaian masalah log masuk latar belakang didedahkan Mar 03, 2024 am 08:57 AM

Penyelesaian masalah log masuk latar belakang Discuz didedahkan. ramai webmaster. Walau bagaimanapun, dengan tepat kerana fungsinya yang berkuasa, kadangkala kami menghadapi beberapa masalah semasa menggunakan Discuz, seperti masalah log masuk latar belakang. Hari ini, kami akan mendedahkan penyelesaian kepada masalah log masuk latar belakang Discuz dan memberikan contoh kod khusus, dengan harapan dapat membantu mereka yang memerlukan

Adakah anda bimbang tentang kod kacau-balau WordPress? Cuba penyelesaian ini Adakah anda bimbang tentang kod kacau-balau WordPress? Cuba penyelesaian ini Mar 05, 2024 pm 09:27 PM

Adakah anda bimbang tentang kod berantakan bahagian belakang WordPress? Cuba penyelesaian ini, contoh kod khusus diperlukan Dengan aplikasi WordPress yang meluas dalam pembinaan laman web, ramai pengguna mungkin menghadapi masalah kod bercelaru di bahagian belakang WordPress. Masalah seperti ini akan menyebabkan antara muka pengurusan latar belakang memaparkan aksara bercelaru, menyebabkan masalah besar kepada pengguna. Artikel ini akan memperkenalkan beberapa penyelesaian biasa untuk membantu pengguna menyelesaikan masalah watak bercelaru dalam bahagian belakang WordPress. Ubah suai fail wp-config.php dan buka wp-config.

Pembangunan sistem pengurusan bahagian belakang ThinkPHP6: merealisasikan fungsi bahagian belakang Pembangunan sistem pengurusan bahagian belakang ThinkPHP6: merealisasikan fungsi bahagian belakang Aug 27, 2023 am 11:55 AM

Pembangunan sistem pengurusan bahagian belakang ThinkPHP6: Melaksanakan fungsi bahagian belakang Pengenalan: Dengan pembangunan berterusan teknologi Internet dan permintaan pasaran, semakin banyak perusahaan dan organisasi memerlukan sistem pengurusan bahagian belakang yang cekap, selamat dan fleksibel untuk mengurus data perniagaan dan menjalankan pengurusan operasi. Artikel ini akan menggunakan rangka kerja ThinkPHP6 untuk menunjukkan melalui contoh cara membangunkan sistem pengurusan bahagian belakang yang mudah tetapi praktikal, termasuk fungsi asas seperti kawalan kebenaran, penambahan data, pemadaman, pengubahsuaian dan pertanyaan. Persediaan persekitaran Sebelum bermula, kita perlu memasang PHP, MySQL, Com

Discuz log masuk latar belakang gagal? Ajar anda cara menyelesaikannya dengan mudah! Discuz log masuk latar belakang gagal? Ajar anda cara menyelesaikannya dengan mudah! Mar 02, 2024 pm 06:03 PM

Discuz log masuk latar belakang gagal? Ajar anda cara menyelesaikannya dengan mudah! Memandangkan Discuz, sebagai platform forum popular, digunakan secara meluas dalam pembinaan dan pengurusan laman web, kadangkala anda akan menghadapi kegagalan log masuk bahagian belakang, yang merisaukan. Hari ini kita akan membincangkan isu yang mungkin menyebabkan kegagalan log masuk bahagian belakang Discuz, menyediakan beberapa penyelesaian dan melampirkan contoh kod tertentu. Saya harap artikel ini dapat membantu juruweb dan pembangun yang menghadapi masalah yang sama. 1. Penyelesaian masalah adalah untuk menyelesaikan masalah kegagalan log masuk latar belakang Discuz.

Bagaimana untuk melumpuhkan latar belakang menjalankan perisian dalam Win11? Bagaimana untuk melumpuhkan latar belakang menjalankan perisian dalam Win11? Jun 30, 2023 am 08:17 AM

Bagaimana untuk melumpuhkan perisian daripada berjalan di latar belakang dalam win11? Kami menggunakan beberapa perisian Apabila kami tidak menggunakannya, kami akan menutup perisian Beberapa perisian masih akan berjalan di latar belakang selepas ia ditutup Semasa proses berjalan di latar belakang, komputer akan menyebabkan lag tertentu . Sesetengah rakan ingin tahu apa yang perlu dilakukan Bagaimana untuk melumpuhkan perisian daripada berjalan di latar belakang dalam win11. Editor di bawah telah menyusun langkah-langkah untuk melumpuhkan perisian daripada berjalan di latar belakang dalam Win11 Jika anda berminat, ikuti editor dan lihat di bawah! Langkah-langkah untuk melumpuhkan perisian yang berjalan di latar belakang dalam win11: 1. Tekan kekunci pintasan "win+X" dan pilih "Tetapan" daripada pilihan yang diberikan di atas. 2. Selepas memasuki antara muka baharu, klik "Apl" dan kemudian cari "Aplikasi dan Ciri" di sebelah kanan. 3. Di dalamnya, cari "Maklumat Microsoft" dan klik

Bagaimana untuk mengalih keluar jquery dalam yii2 Bagaimana untuk mengalih keluar jquery dalam yii2 Feb 17, 2023 am 09:55 AM

Bagaimana untuk mengalih keluar jquery daripada yii2: 1. Edit fail AppAsset.php dan ulas nilai "yii\web\YiiAsset" dalam pembolehubah $depends 2. Edit fail main.php dan tambah konfigurasi sebagai "'yii" di bawah medan "komponen" \web\JqueryAsset' => ['js' => [],'sourcePath' => null,]," untuk mengalih keluar skrip jquery.

Discuz pengecualian log masuk akaun latar belakang, bagaimana untuk menanganinya? Discuz pengecualian log masuk akaun latar belakang, bagaimana untuk menanganinya? Mar 09, 2024 pm 05:51 PM

Tajuk: Discuz pengecualian log masuk akaun latar belakang, bagaimana untuk menanganinya? Apabila anda menggunakan pengurusan bahagian belakang sistem forum Discuz, kadangkala anda mungkin menghadapi log masuk akaun yang tidak normal. Ini mungkin disebabkan oleh pelbagai sebab, termasuk kata laluan yang salah, akaun disekat, isu sambungan rangkaian, dsb. Apabila menghadapi situasi ini, kita perlu menyelesaikan masalah melalui penyelesaian masalah dan pemprosesan yang mudah. Semak sama ada nombor akaun dan kata laluan adalah betul: Mula-mula, sahkan sama ada nombor akaun dan kata laluan yang anda masukkan adalah betul. Semasa log masuk, pastikan huruf besar adalah betul dan kata laluan adalah betul

Bagaimana untuk menukar dengan lancar antara aplikasi yang berbeza di bawah sistem Linux Bagaimana untuk menukar dengan lancar antara aplikasi yang berbeza di bawah sistem Linux Feb 19, 2024 pm 03:00 PM

Bertukar antara aplikasi yang berbeza dicapai melalui proses penukaran hadapan dan belakang. Latar Belakang: Selepas Linux memulakan program, ia beralih ke latar belakang untuk pelaksanaan dan mahu terus beroperasi di Linux. Di Linux, anda boleh menggunakan kaedah berikut untuk memulakan program dan keluar di latar belakang, tetapi masih meneruskan prosesnya: 1. Linux memulakan program untuk melaksanakan di latar belakang 1. Gunakan nohup dan &: $nohupyour_program& Gunakan arahan nohup untuk membuat Program mengabaikan isyarat gantung (SIGHUP) supaya atur cara terus berjalan walaupun anda keluar dari terminal. Simbol & menyebabkan program berjalan di latar belakang. 2. Gunakan ctrl+Z: Jika anda telah memulakan program di latar depan, anda boleh menggunakan ct

See all articles