Maison php教程 php手册 深入解析yii权限分级式访问控制的实现(非RBAC法)

深入解析yii权限分级式访问控制的实现(非RBAC法)

Jun 06, 2016 pm 08:31 PM
yii 访问控制

本篇文章是对yii权限分级式访问控制的实现方法进行了详细的分析介绍,需要的朋友参考下

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('*'),
),
);
}


关于更多的访问规则的设定请参照官方文件
好了,现在要开始按照我们自己的需求设置适合自己的权限分配了。我们希望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('*'),
),
);


工作完成!
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser Vue pour la gestion des autorisations et le contrôle d'accès Comment utiliser Vue pour la gestion des autorisations et le contrôle d'accès Aug 02, 2023 pm 09:01 PM

Comment utiliser Vue pour la gestion des autorisations et le contrôle d'accès Dans les applications Web modernes, la gestion des autorisations et le contrôle d'accès sont une fonctionnalité essentielle. En tant que framework JavaScript populaire, Vue offre un moyen simple et flexible de mettre en œuvre la gestion des autorisations et le contrôle d'accès. Cet article expliquera comment utiliser Vue pour implémenter des fonctions de base de gestion des autorisations et de contrôle d'accès, et joindra des exemples de code. Définition des rôles et des autorisations Avant de commencer, vous devez d'abord définir les rôles et les autorisations dans votre application. Un rôle est un ensemble spécifique d'autorisations, et

Utilisez le langage Go pour résoudre des problèmes de contrôle d'accès à grande échelle Utilisez le langage Go pour résoudre des problèmes de contrôle d'accès à grande échelle Jun 15, 2023 pm 02:59 PM

Avec le développement d’Internet, les questions de contrôle d’accès sont devenues un sujet de plus en plus important. Dans la gestion traditionnelle des autorisations, les listes d’autorisation de rôle ou de contrôle d’accès sont généralement utilisées pour contrôler les ressources. Cependant, cette méthode est souvent incapable de s’adapter aux besoins de contrôle d’accès à grande échelle car il est difficile de mettre en œuvre de manière flexible un contrôle d’accès pour différents rôles et ressources. Pour résoudre ce problème, l’utilisation du langage Go pour résoudre des problèmes de contrôle d’accès à grande échelle est devenue une méthode efficace. Le langage Go est un langage de programmation simultanée. Il offre d'excellentes performances de concurrence et une compilation rapide.

Comment Nginx implémente la configuration du contrôle d'accès basée sur l'adresse IP source de la requête Comment Nginx implémente la configuration du contrôle d'accès basée sur l'adresse IP source de la requête Nov 08, 2023 am 10:09 AM

La manière dont Nginx implémente la configuration du contrôle d'accès basée sur l'adresse IP source de la requête nécessite des exemples de code spécifiques. Dans le développement d'applications réseau, la protection du serveur contre les attaques malveillantes est une étape très importante. En utilisant Nginx comme serveur proxy inverse, nous pouvons configurer le contrôle d'accès IP pour restreindre l'accès à des adresses IP spécifiques afin d'améliorer la sécurité du serveur. Cet article présentera comment implémenter la configuration du contrôle d'accès basée sur l'adresse IP source de la requête dans Nginx et fournira des exemples de code spécifiques. Tout d'abord, nous devons éditer le fichier de configuration Nginx

Comment PHP gère-t-il les requêtes inter-domaines et le contrôle d'accès ? Comment PHP gère-t-il les requêtes inter-domaines et le contrôle d'accès ? Jun 30, 2023 pm 11:04 PM

Comment PHP gère-t-il les requêtes inter-domaines et le contrôle d'accès ? Résumé : Avec le développement des applications Internet, les requêtes inter-domaines et le contrôle d'accès sont devenus un enjeu important dans le développement PHP. Cet article présentera les méthodes et techniques sur la manière dont PHP gère les requêtes inter-domaines et le contrôle d'accès, dans le but d'aider les développeurs à mieux comprendre et gérer ces problèmes. Qu'est-ce qu'une requête inter-domaines ? La requête inter-domaines signifie que dans le navigateur, une page Web d’un domaine demande à accéder aux ressources d’un autre domaine. Les requêtes inter-domaines se produisent généralement dans les requêtes AJAX, les références image/script/css, etc. Dépendre de

Comment utiliser le framework PHP Yii pour développer un système de sauvegarde cloud hautement disponible Comment utiliser le framework PHP Yii pour développer un système de sauvegarde cloud hautement disponible Jun 27, 2023 am 09:04 AM

Avec le développement continu de la technologie du cloud computing, la sauvegarde des données est devenue quelque chose que chaque entreprise doit faire. Dans ce contexte, il est particulièrement important de développer un système de sauvegarde cloud hautement disponible. Le framework PHP Yii est un framework puissant qui peut aider les développeurs à créer rapidement des applications Web hautes performances. Ce qui suit explique comment utiliser le framework Yii pour développer un système de sauvegarde cloud hautement disponible. Conception du modèle de base de données Dans le framework Yii, le modèle de base de données est une partie très importante. Parce que le système de sauvegarde des données nécessite beaucoup de tables et de relations

Une exploration approfondie des méthodes d'analyse du trafic et de contrôle d'accès de Nginx Une exploration approfondie des méthodes d'analyse du trafic et de contrôle d'accès de Nginx Aug 05, 2023 pm 05:46 PM

Une discussion approfondie des méthodes d'analyse du trafic et de contrôle d'accès de Nginx. Nginx est un serveur Web open source hautes performances. Il est puissant et évolutif, il est donc largement utilisé dans le domaine Internet. Dans les applications pratiques, nous devons généralement analyser le trafic Nginx et contrôler l'accès. Cet article approfondira les méthodes d'analyse du trafic et de contrôle d'accès de Nginx et fournira des exemples de code correspondants. 1. Analyse du trafic Nginx Nginx fournit de nombreuses variables intégrées qui peuvent être utilisées pour analyser le trafic. Parmi eux, couramment utilisés

L'éditeur de contrôle d'accès ne peut pas être ouvert dans Win10 L'éditeur de contrôle d'accès ne peut pas être ouvert dans Win10 Jan 03, 2024 pm 10:05 PM

L'impossibilité d'ouvrir l'éditeur de contrôle d'accès dans Win10 est un problème rare. Ce problème se produit généralement sur les disques durs externes et les clés USB. En fait, la solution est très simple. Ouvrez-le simplement en mode sans échec et jetons-y un coup d'œil. un aperçu des détails ci-dessous. Win10 ne peut pas ouvrir l'éditeur de contrôle d'accès. 1. Dans l'interface de connexion, maintenez la touche Maj enfoncée, cliquez sur le bouton, cliquez sur 2.--, cliquez sur 3. Après le redémarrage, appuyez sur F5 pour essayer d'entrer et voir si vous pouvez entrer. Articles liés au mode sans échec Win10>>>Comment accéder au mode sans échec Win10<<<>>>Comment réparer le système en mode sans échec Win10<<<

Symfony vs Yii2 : quel framework est le meilleur pour développer des applications Web à grande échelle ? Symfony vs Yii2 : quel framework est le meilleur pour développer des applications Web à grande échelle ? Jun 19, 2023 am 10:57 AM

Alors que la demande d'applications Web continue de croître, les développeurs ont de plus en plus de choix dans le choix des frameworks de développement. Symfony et Yii2 sont deux frameworks PHP populaires. Ils ont tous deux des fonctions et des performances puissantes, mais face à la nécessité de développer des applications Web à grande échelle, quel framework est le plus adapté ? Nous procéderons ensuite à une analyse comparative de Symphony et Yii2 pour vous aider à faire un meilleur choix. Présentation de base Symphony est un framework d'application Web open source écrit en PHP et basé sur

See all articles