CAuthManager


system.web.auth
继承 abstract class CAuthManager » CApplicationComponent » CComponent
实现 IApplicationComponent, IAuthManager
子类 CDbAuthManager, CPhpAuthManager
源自 1.0
版本 $Id: CAuthManager.php 3515 2011-12-28 12:29:24Z mdomba $
源码
CAuthManager是授权管理类的基类。

CAuthManager继承于CApplicationComponent,实现了一些 在授权管理类中的通用方法。

CAuthManager和它的具体子类实现了 基于用户角色访问控制(RBAC)。

主要思想是,层级权限是由 授权项目来管理的。高层的项目 继承了低层的项目权限。角色是最高级的授权项目, 会赋予给每个用户。一个用户所拥有的权限, 是由他的角色所继承的授权项目决定的。

使用授权管理器包含两个方面。第一,授权等级和任务 必须要既定的。CAuthManager和它的子类 提供API来完成这个任务。开发人员需要开发一些GUI, 使这些操作更加直观的展示给最终用户。第二,开发人员在程序里面适当的位置 调用IAuthManager::checkAccess来检测当前用户 是否含有该操作的权限。

公共属性

属性 类型 描述 定义在
authItems array 返回指定类型和用户的授权项。 IAuthManager
behaviors array 这个应用组件附加的行为。 这此行为将在应用组件调用init时附加在应用组件上。 请参照CModel::behaviors如何指定此属性值。 CApplicationComponent
defaultRoles array 隐式赋予给所有用户的角色名字列表。 这些角色不需要显式赋予给所有用户。 当调用checkAccess,会首先检查这些角色。 为了能够提高程序效率,这样的角色越少越好。 一个典型的用法是,定义一个“authenticated”角色,然后 把它关联到一个业务逻辑规则,这个规则是用来验证当前用户的。 然后在这个属性声明“authenticated”以便应用到 所有的验证用户。 CAuthManager
isInitialized boolean 检查应用组件是否已经初始化。 CApplicationComponent
operations array 返回操作。 CAuthManager
roles array 返回角色。 CAuthManager
showErrors boolean 允许业务规则错误报告。 CAuthManager
tasks array 返回任务。 CAuthManager

公共方法

方法 描述 定义在
__call() 如果类中没有调的方法名,则调用这个方法。 CComponent
__get() 返回一个属性值、一个事件处理程序列表或一个行为名称。 CComponent
__isset() 检查一个属性是否为null。 CComponent
__set() 设置一个组件的属性值。 CComponent
__unset() 设置一个组件的属性为null。 CComponent
addItemChild() 添加一个授权项作为另一个授权项的子授权项。 IAuthManager
asa() 返回这个名字的行为对象。 CComponent
assign() 为用户分配一个授权项。 IAuthManager
attachBehavior() 附加一个行为到组件。 CComponent
attachBehaviors() 附加一个行为列表到组件。 CComponent
attachEventHandler() 为事件附加一个事件处理程序。 CComponent
canGetProperty() 确定属性是否可读。 CComponent
canSetProperty() 确定属性是否可写。 CComponent
checkAccess() 检查指定用户的执行权限。 IAuthManager
clearAll() 移除所有授权数据。 IAuthManager
clearAuthAssignments() 移除所有授权分配信息。 IAuthManager
createAuthItem() 创建一个授权项。 IAuthManager
createOperation() 创建一个操作。 CAuthManager
createRole() 创建一个角色。 CAuthManager
createTask() 创建一个任务。 CAuthManager
detachBehavior() 从组件中分离一个行为。 CComponent
detachBehaviors() 从组件中分离所有行为。 CComponent
detachEventHandler() 分离一个存在的事件处理程序。 CComponent
disableBehavior() 禁用一个附加行为。 CComponent
disableBehaviors() 禁用组件附加的所有行为。 CComponent
enableBehavior() 启用一个附加行为。 CComponent
enableBehaviors() 启用组件附加的所有行为。 CComponent
evaluateExpression() 计算一个PHP表达式,或根据组件上下文执行回调。 CComponent
executeBizRule() 执行指定的业务规则。 CAuthManager
getAuthAssignment() 返回授权项分配信息。 IAuthManager
getAuthAssignments() 返回指定用户的授权项分配信息。 IAuthManager
getAuthItem() 返回指定名字的授权项 IAuthManager
getAuthItems() 返回指定类型和用户的授权项。 IAuthManager
getEventHandlers() 返回一个事件的附加处理程序列表。 CComponent
getIsInitialized() 检查应用组件是否已经初始化。 CApplicationComponent
getItemChildren() 返回指定授权项的子授权项。 IAuthManager
getOperations() 返回操作。 CAuthManager
getRoles() 返回角色。 CAuthManager
getTasks() 返回任务。 CAuthManager
hasEvent() 确定一个事件是否定义。 CComponent
hasEventHandler() 检查事件是否有附加的处理程序。 CComponent
hasItemChild() 返回一个值表示父授权项是否存在子授权项。 IAuthManager
hasProperty() 确定属性是否被定义。 CComponent
init() 初始化应用组件。 CApplicationComponent
isAssigned() 返回一个值表示判断授权项是否分配给指定用户。 IAuthManager
raiseEvent() 发起一个事件。 CComponent
removeAuthItem() 移除指定授权项。 IAuthManager
removeItemChild() 从父授权项中移除子授权项。 IAuthManager
revoke() 撤销一个用户分配的授权项。 IAuthManager
save() 保存授权数据到持久存储。 IAuthManager
saveAuthAssignment() 保存修改的授权信息。 IAuthManager
saveAuthItem() 保存授权项到持久存储。 IAuthManager

受保护方法

方法 描述 定义在
checkItemChildType() 检查项目类型以确定一个子项目已经赋予给一个父项目。 CAuthManager

属性详细

defaultRoles 属性
public array $defaultRoles;

隐式赋予给所有用户的角色名字列表。 这些角色不需要显式赋予给所有用户。 当调用checkAccess,会首先检查这些角色。 为了能够提高程序效率,这样的角色越少越好。 一个典型的用法是,定义一个“authenticated”角色,然后 把它关联到一个业务逻辑规则,这个规则是用来验证当前用户的。 然后在这个属性声明“authenticated”以便应用到 所有的验证用户。

operations 属性 只读
public array getOperations(mixed $userId=NULL)

返回操作。 这个方法是IAuthManager::getAuthItems的快捷方式

roles 属性 只读
public array getRoles(mixed $userId=NULL)

返回角色。 这个方法是IAuthManager::getAuthItems的快捷方式。

showErrors 属性 (可用自 v1.1.3)
public boolean $showErrors;

允许业务规则错误报告。

tasks 属性 只读
public array getTasks(mixed $userId=NULL)

返回任务。 这个方法是IAuthManager::getAuthItems的快捷方式

方法详细

checkItemChildType() 方法
protected void checkItemChildType(integer $parentType, integer $childType)
$parentType integer 父项目的类型
$childType integer 子项目类型
protected function checkItemChildType($parentType,$childType)
{
    static 
$types=array('operation','task','role');
    if(
$parentType $childType)
        throw new 
CException(Yii::t('yii','Cannot add an item of type "{child}" to an item of type "{parent}".',
            array(
'{child}'=>$types[$childType], '{parent}'=>$types[$parentType])));
}

检查项目类型以确定一个子项目已经赋予给一个父项目。

createOperation() 方法
public CAuthItem createOperation(string $name, string $description='', string $bizRule=NULL, mixed $data=NULL)
$name string 项目名字
$description string 项目描述。
$bizRule string 关联到这个项目的业务逻辑
$data mixed 当执行业务规则的时候所传递的额外的数据。
{return} CAuthItem 授权项目。
public function createOperation($name,$description='',$bizRule=null,$data=null)
{
    return 
$this->createAuthItem($name,CAuthItem::TYPE_OPERATION,$description,$bizRule,$data);
}

创建一个操作。 这个方法是IAuthManager::createAuthItem的快捷方式。

createRole() 方法
public CAuthItem createRole(string $name, string $description='', string $bizRule=NULL, mixed $data=NULL)
$name string 项目名字
$description string 项目描述。
$bizRule string 关联到这个项目的业务规则
$data mixed 执行业务规则的时候所传递的额外的数据。
{return} CAuthItem 授权项目
public function createRole($name,$description='',$bizRule=null,$data=null)
{
    return 
$this->createAuthItem($name,CAuthItem::TYPE_ROLE,$description,$bizRule,$data);
}

创建一个角色。 这个方法是IAuthManager::createAuthItem的快捷方式。

createTask() 方法
public CAuthItem createTask(string $name, string $description='', string $bizRule=NULL, mixed $data=NULL)
$name string 项目名字
$description string 项目描述。
$bizRule string 关联到这个项目的业务规则。
$data mixed 执行这个业务规则时候所传递的额外的数据。
{return} CAuthItem 验证项目。
public function createTask($name,$description='',$bizRule=null,$data=null)
{
    return 
$this->createAuthItem($name,CAuthItem::TYPE_TASK,$description,$bizRule,$data);
}

创建一个任务。 这个方法是IAuthManager::createAuthItem的快捷方式。

executeBizRule() 方法
public boolean executeBizRule(string $bizRule, array $params, mixed $data)
$bizRule string 要执行的业务规则。
$params array 传递给IAuthManager::checkAccess的参数
$data mixed 关联到授权项目或者任务的额外的数据。
{return} boolean 这个业务规则是否返回true。 如果业务规则为空,则返回true。
public function executeBizRule($bizRule,$params,$data)
{
    return 
$bizRule==='' || $bizRule===null || ($this->showErrors ? eval($bizRule)!=: @eval($bizRule)!=0);
}

执行指定的业务规则。

getOperations() 方法
public array getOperations(mixed $userId=NULL)
$userId mixed 用户ID。如果不为null,那么只会返回赋予给这个 用户的操作。否则返回所有的操作。
{return} array operations (name=>CAuthItem)
public function getOperations($userId=null)
{
    return 
$this->getAuthItems(CAuthItem::TYPE_OPERATION,$userId);
}

返回操作。 这个方法是IAuthManager::getAuthItems的快捷方式

getRoles() 方法
public array getRoles(mixed $userId=NULL)
$userId mixed 用户ID。如果不为null,那么只返回赋予给这个用户 的角色。否则返回所有的角色。
{return} array 角色(name=>CAuthItem)
public function getRoles($userId=null)
{
    return 
$this->getAuthItems(CAuthItem::TYPE_ROLE,$userId);
}

返回角色。 这个方法是IAuthManager::getAuthItems的快捷方式。

getTasks() 方法
public array getTasks(mixed $userId=NULL)
$userId mixed 用户ID。如果不为null,只返回赋予给这个用户 任务。否则返回所有任务。
{return} array tasks (name=>CAuthItem)
public function getTasks($userId=null)
{
    return 
$this->getAuthItems(CAuthItem::TYPE_TASK,$userId);
}

返回任务。 这个方法是IAuthManager::getAuthItems的快捷方式