深入解析yii权限分级式访问控制的实现(非RBAC法)_php技巧
yii framework 提供了2套权限访问系统,一套是简单的filter(过滤器)模式,另一套是复杂全面的RBAC模式,我这里要讲的是第一套(因为我也刚刚学到这里)。如 果你有研究过YII官方的demo blog,一定知道,比如,由gii自动生成的user模块,自动附带了简单的filter权限分配功能,具体细节请参照blog手册的“用户验证”一章 节,以及yii官方指南的“验证和授权”一章节。(注意,我这里所指的模块,只是我个人对与user有关的文件的统称,与yii文件系统的模块 (module)含义不同。)
关于权限分配的文件大多在controllers里,比如打开UserController.php文件你会看到2个类函数。
public function filters()
{
return array(
'accessControl', // 实现CRUD操作的访问控制。
'postOnly + delete',
);
}
public function accessRules() //这里就是访问规则的设置。
{
return array(
array('allow', // 允许所有用户执行index,view动作。
'actions'=>array('index','view'),
'users'=>array('*'),
),
array('allow', // 只允许经过验证的用户执行create, update动作。
'actions'=>array('create','update'),
'users'=>array('@'), // @号指所有注册的用户
),
array('allow', // 只允许用户名是admin的用户执行admin,delete动作
'actions'=>array('admin','delete'),
'users'=>array('admin'),
), //admin就是指用户名是admin的用户,以硬编码的形式分配用户权限。
array('deny', // 拒绝所有的访问。
'users'=>array('*'),
),
);
}
关于更多的访问规则的设定请参照官方文件http://www.yiiframework.com/doc/api/1.1/CAccessControlFilter
好了,现在要开始按照我们自己的需求设置适合自己的权限分配了。我们希望filter访问控制模式能更完美一点,按照常识,我们希望它能按照数据库里user表里不同级别用户,实行不同的授权,而不是用硬编码的形式控制。
回到demo blog,我先对数据库的tbl_user表做修改,在原来的基础上加上role一项。对原来的用户信息记录添加role的value为"管理员"或"一般用户"。
然后依次执行以下3个步骤:
1. 创建组件WebUser,它是对CWebUser的扩展。
2. 修改config/main.php文件。
3.修改accessRules()。
具体细节如下:
1.WebUser.php 组件代码:
// this file must be stored in:
// protected/components/WebUser.php
class WebUser extends CWebUser {
// Store model to not repeat query.
private $_model;
// Return first name.
// access it by Yii::app()->user->first_name
function getFirst_Name(){
$user = $this->loadUser(Yii::app()->user->id);
return $user->first_name;
}
// This is a function that checks the field 'role'
// in the User model to be equal to 1, that means it's admin
// access it by Yii::app()->user->isAdmin()
function isAdmin(){
$user = $this->loadUser(Yii::app()->user->id);
if ($user==null)
return 0;
else
return $user->role == "管理员";
}
// Load user model.
protected function loadUser($id=null)
{
if($this->_model===null)
{
if($id!==null)
$this->_model=User::model()->findByPk($id);
}
return $this->_model;
}
}
?>
2.在config/main.php找到如下代码,添加标红色的代码。
'components'=>array(
'user'=>array(
// enable cookie-based authentication
'allowAutoLogin'=>true,
'class'=>'WebUser',
),
3.找到需要更改权限的controller类,对accessRules()函数做修改,比如对前文的accessRules()函数做如下修改:
public function accessRules() //这里就是访问规则的设置。 {
return array(
array('allow', // 允许所有用户执行index,view动作。
'actions'=>array('index','view'),
'users'=>array('*'), //*号标识所有用户包括注册的、没注册的、一般的、管理员级的
),
array('allow', // 只允许经过验证的用户执行create, update动作。
'actions'=>array('create','update'),
'users'=>array('@'), // @号指所有注册的用户
),
array('allow', // 只允许用户名是admin的用户执行admin,delete动作
'actions'=>array('admin','delete'),
'expression'=>'yii::app()->user->isAdmin()',
//这样只有标识为“管理员”的用户才能访问admin,delete动作
),
array('deny', // 拒绝所有的访问。
'users'=>array('*'),
),
);
工作完成!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cara menggunakan Vue untuk pengurusan kebenaran dan kawalan capaian Dalam aplikasi web moden, pengurusan kebenaran dan kawalan capaian ialah ciri kritikal. Sebagai rangka kerja JavaScript yang popular, Vue menyediakan cara yang mudah dan fleksibel untuk melaksanakan pengurusan kebenaran dan kawalan akses. Artikel ini akan memperkenalkan cara menggunakan Vue untuk melaksanakan pengurusan kebenaran asas dan fungsi kawalan akses, serta melampirkan contoh kod. Menentukan Peranan dan Kebenaran Sebelum anda bermula, anda perlu menentukan peranan dan kebenaran dalam aplikasi anda terlebih dahulu. Peranan ialah set kebenaran khusus, dan

Dengan perkembangan berterusan teknologi pengkomputeran awan, sandaran data telah menjadi sesuatu yang mesti dilakukan oleh setiap perusahaan. Dalam konteks ini, amat penting untuk membangunkan sistem sandaran awan yang sangat tersedia. Rangka kerja PHP Yii ialah rangka kerja berkuasa yang boleh membantu pembangun membina aplikasi web berprestasi tinggi dengan cepat. Berikut akan memperkenalkan cara menggunakan rangka kerja Yii untuk membangunkan sistem sandaran awan yang sangat tersedia. Mereka bentuk model pangkalan data Dalam rangka kerja Yii, model pangkalan data adalah bahagian yang sangat penting. Kerana sistem sandaran data memerlukan banyak jadual dan hubungan

Cara Nginx melaksanakan konfigurasi kawalan akses berdasarkan IP sumber permintaan memerlukan contoh kod khusus Dalam pembangunan aplikasi rangkaian, melindungi pelayan daripada serangan berniat jahat adalah langkah yang sangat penting. Menggunakan Nginx sebagai pelayan proksi terbalik, kami boleh mengkonfigurasi kawalan akses IP untuk menyekat akses kepada alamat IP tertentu untuk meningkatkan keselamatan pelayan. Artikel ini akan memperkenalkan cara melaksanakan konfigurasi kawalan akses berdasarkan IP sumber permintaan dalam Nginx dan memberikan contoh kod khusus. Pertama, kita perlu mengedit fail konfigurasi Nginx

Dengan perkembangan Internet, isu kawalan akses semakin menjadi topik penting. Dalam pengurusan kebenaran tradisional, kebenaran peranan atau senarai kawalan akses biasanya digunakan untuk mengawal sumber. Walau bagaimanapun, kaedah ini selalunya tidak dapat menyesuaikan diri dengan keperluan kawalan akses berskala besar kerana sukar untuk melaksanakan kawalan akses secara fleksibel untuk peranan dan sumber yang berbeza. Untuk menyelesaikan masalah ini, menggunakan bahasa Go untuk menyelesaikan masalah kawalan akses berskala besar telah menjadi kaedah yang berkesan. Bahasa Go ialah bahasa untuk pengaturcaraan serentak Ia mempunyai prestasi konkurensi yang sangat baik dan penyusunan pantas.

Ketidakupayaan untuk membuka editor kawalan akses dalam win10 adalah masalah yang jarang berlaku. Masalah ini biasanya berlaku dalam pemacu keras luaran dan pemacu kilat USB lihat butiran di bawah. Win10 tidak boleh membuka editor kawalan akses 1. Dalam antara muka log masuk, tahan shift, klik butang, klik 2.--, klik 3. Selepas memulakan semula, tekan F5 untuk cuba masuk dan lihat jika anda boleh masuk. Artikel berkaitan win10 safe mode>>>Cara masuk win10 safe mode<<<>>>Cara baiki sistem dalam win10 safe mode<<<

Perbincangan mendalam tentang analisis trafik dan kaedah kawalan akses Nginx ialah pelayan web sumber terbuka berprestasi tinggi Ia berkuasa dan boleh skala, jadi ia digunakan secara meluas dalam bidang Internet. Dalam aplikasi praktikal, kita biasanya perlu menganalisis trafik Nginx dan mengawal akses. Artikel ini akan menyelidiki analisis trafik Nginx dan kaedah kawalan akses serta memberikan contoh kod yang sepadan. 1. Analisis trafik Nginx Nginx menyediakan banyak pembolehubah terbina dalam yang boleh digunakan untuk menganalisis trafik. Antaranya, biasa digunakan

Memandangkan permintaan untuk aplikasi web terus berkembang, pembangun mempunyai lebih banyak pilihan dalam memilih rangka kerja pembangunan. Symfony dan Yii2 ialah dua rangka kerja PHP yang popular Kedua-duanya mempunyai fungsi dan prestasi yang berkuasa, tetapi apabila berhadapan dengan keperluan untuk membangunkan aplikasi web berskala besar, rangka kerja manakah yang lebih sesuai? Seterusnya kami akan menjalankan analisis perbandingan Symphony dan Yii2 untuk membantu anda membuat pilihan yang lebih baik. Gambaran Keseluruhan Asas Symphony ialah rangka kerja aplikasi web sumber terbuka yang ditulis dalam PHP dan dibina di atas

Dengan populariti aplikasi Internet, kami berharap dapat melindungi data dalam aplikasi untuk memastikan data sensitif tidak disalahgunakan atau dicuri. Salah satu penyelesaiannya ialah menggunakan kawalan akses berasaskan peranan (RBAC). Kawalan capaian berasaskan peranan (RBAC) ialah model kawalan capaian berdasarkan perhubungan antara pengguna dan peranan. Idea teras model ini adalah untuk memautkan peranan pengguna kepada operasi kawalan akses, dan bukannya memautkan operasi kawalan akses terus kepada pengguna. Pendekatan ini meningkatkan fleksibiliti kawalan akses,
