Yii简单的用户授权系统

Yii简单的用户授权系统
admin | 2012-07-08
数据库

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

在配置文件(一般为 protected/config/main.php)中添加(或修改为)以下代码1
2
3
4
5
6
7 'components'=>array(
'user'=>array(
//告诉应用程序使用自己的 WebUser 类,而不是默认的 CWebUser
'class'=>'WebUser',
//...
),
),


在组件文件夹(protected/components)中,创建 WebUser.php 文件,内容为1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 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) 中来验证用户了1
2
3
4
5
6
7
8
9
10
11
12
13
14 //在控制器中
function accessRules(){
return array(
//只有管理员可以访问
array('allow',
'expression'=>'$user->isAdmin',
//变量 `user` 在访问规则(accessRule)表达式中表示的是 Yii::app()->user
),
//deny all other users
array('deny',
'users'=>array('*').
),
);
}


在视图中使用1
2
3
4
5
6 if(Yii::app()->user->isAdmin){
echo '欢迎,管理员!';
}
if(Yii::app()->user->isSuperAdmin){
echo '你是超级管理员!';
}

数据表示

在用户名模型中(User Model),整型的那个字段的数据用以下方式表达1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 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 );
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值