网站地图    收藏   

主页 > 后端 > php资料库 >

Yii简单的用户授权系统概述_自学php网

来源:自学PHP网    时间:2014-12-04 22:12 作者: 阅读:

[导读] 数据库 首先在 user 表创建一个新的字段(integer 类型),字段名 ' accessLevel ',它定义了用户的访问权限 扩展 CWebUser 类 在配置文件(一般为 protected/config/main.php)中添加(或修改为)以下代码 'com...

数据库

首先在 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网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论