首页 > PHP资讯 > PHP培训技术 > yii-简单的用户授权系统

yii-简单的用户授权系统

PHP培训技术

怎么创建一个简单的(非 RBAC)用户授权系统

通过查看论坛,我发现这是一个常见的问题,所以我决定写这篇文章。

本文只包括授权系统.假设你已经知道怎么创建身份验证系统(登录)。

数据库

首先在user表创建一个新的字段(integer 类型),字段名 'accessLevel',它定义了用户的访问权限

扩展 CWebUser 类

在配置文件(一般为 protected/config/main.php)中添加(或修改为)以下代码

'components'=>array( 'user'=>array( //告诉应用程序使用自己的 WebUser 类,而不是默认的 CWebUser 'class'=>'WebUser', //... ), ),

在组件文件夹(protected/components)中,创建WebUser.php文件,内容为

class WebUser extends CWebUser{ private $_user; //是用户还是超级管理员? function getIsSuperAdmin(){ return ( $this->user && $this->user->accessLevel === User::LEVEL_SUPERADMIN ); } //该用户是否为管理员? function getIsAdmin(){ return ( $this->user && $this->user->accessLevel >= User::LEVEL_ADMIN ); } //获取登录用户 function getUser(){ if( $this->isGuest ) return; if( $this->_user === null ){ $this->_user = User::model()->findByPk( $this->id ); } return $this->_user; } }

用法

现在可以在 accessControl 过滤器(filter) 中来验证用户了

//在控制器中 function accessRules(){ return array( //只有管理员可以访问 array('allow', 'expression'=>'$user->isAdmin', //变量 `user` 在访问规则(accessRule)表达式中表示的是 Yii::app()->user ), //deny all other users array('deny', 'users'=>array('*'). ), ); }

在视图中使用

if(Yii::app()->user->isAdmin){ echo '欢迎,管理员!'; } if(Yii::app()->user->isSuperAdmin){ echo '你是超级管理员!'; }

数据表示

在用户名模型中(User Model),整型的那个字段的数据用以下方式表达

class User extends CActiveRecord{ //define the number of levels that you need const LEVEL_REGISTERED=0, LEVEL_AUTHOR=1, LEVEL_ADMIN=6, LEVEL_SUPERADMIN=99; //define the label for each level static function getAccessLevelList( $level = null ){ $levelList=array( self::LEVEL_REGISTERED => 'Registered', self::LEVEL_AUTHOR => 'Author', self::LEVEL_ADMIN => 'Administrator' ); if( $level === null) return $levelList; return $levelList[ $level ]; } } //using it in forms $form->dropDownList($model,'accessLevel',$model->accessLevelList); //using it in DetailView $this->widget('zii.widgets.CDetailView',array( 'data'=>$model, 'attributes'=>array( //..., array( 'name'=>'accessLevel', 'value'=>$model->accessLevelList[$model->accessLevel], ), ), )); //using it in GridView $this->widget('zii.widgets.CGridView',array( 'dataProvider'=>$model->search(), 'columns'=>array( //..., array( 'name'=>'accessLevel', 'value'=>'$data->accessLevelList[$data->accessLevel]', ), ), )); //display the administrator label  echo User::getAccessLevelList( User::LEVEL_ADMIN );

以上就是所有内容,希望这对你有所帮助。

PHP培训技术

本文由欣才IT学院整理发布,未经许可,禁止转载。
支持49不支持0