文档详情

访问控制列表(ZendAcl).ppt

za****8
实名认证
店铺
PPT
342.84KB
约14页
文档ID:15655437
访问控制列表(ZendAcl).ppt_第1页
1/14

第16章 访问控制列表(Zend_Acl),访问控制列表(ACL)是应用在路由器接口的指令列表该指令列表用来告诉路由器哪些数据包可以接收、哪些数据包需要拒绝至于数据包是被接收还是拒绝,可以由类似于源地址、目的地址、端口号等的特定指示条件来决定使用Zend Framework中的Zend_Acl组件即可实现完整的访问控制该组件提供了一整套实现访问控制列表(Access Control List)的解决方案合理使用该类组件,可以实现用户所要求的访问控制本章就来向读者介绍如何使用Zend_Acl组件实现访问控制功能16.1 资源与角色,Zend_Acl组件中定义了两个重要的概念,即资源与角色资源(Resource)是指一个被限制访问的对象;角色(Role)则是指可以发出请求来访问资源的对象Zend_Acl组件中分别以Zend_Acl_Role类与Zend_Acl_Resource类来表示资源与角色要创建角色与资源只需要为这些类实例化对象即可在实例化对象时,需要为资源或者角色提供参数(详情请参见本章后面的实例代码)16.1.1 Zend_Acl中的资源,在Zend_Acl中,资源就是所有被访问对象的统称。

如论坛中的贴子、新闻管理系统中的新闻等都可以被看作是资源在Zend_Acl中,创建一个资源非常简单Zend_Acl提供了Zend_Acl_Resource_Interface接口,该接口使开发者可以非常方便的创建Resource为了使Zend_Acl把某个对象当作一个Resource,一个类只需要实现包含了一个方法getResourceId()的接口即可另外,Zend_Acl_Resource是一个包含在Zend_Acl里作为一个基本的Resource实现的类,开发者可以任意对其进行扩展16.1.2 Zend_Acl中的角色,与资源相对应,在Zend_Acl中,角色就是所有进行访问对象的统称如论坛中的各种用户贴子、新闻管理系统中的新闻创建者与管理者等都可以被看作是角色Role(角色)与Resource(资源)一样,其创建过程也非常简单Zend_Acl提供了Zend_Acl_Role_Interface接口方便开发者创建Roles为了使Zend_Acl把某个对象当作一个Role,一个类只需要实现这个只包含了一个方法getRoleId()的接口与Zend_Acl_Resource一样,Zend_Acl_Role也是一个包含在Zend_Acl里作为一个基本的Role实现的类。

16.2 创建并使用访问控制列表,在介绍完了资源与角色之后,本节就来介绍如何创建并使用ACL(访问控制列表)通常这一使用过程包括以下几步:创建ACL、注册角色、定义访问控制以及查询ACL等本节就这几步分别为读者作介绍16.2.1 创建ACL,从本章引言中对访问控制列表的定义可以看出,ACL可以表示任何一组物理或虚拟对象为了便于理解,这里将创建一个基本的论坛(BBS)的ACL,该ACL将维护若干个等级的组为创建一个新的ACL对象,可以使用new关键字直接不带参数地实例化这个ACL类16.2.2 注册角色及定义访问控制,本节来介绍如何向已有的ACL中注册角色要将指定的角色注册到访问控制列表中,可以使用访问控制列表实例的addRole()方法,该方法的语法格式如下所示 addRole($role,$parentrole); allow($role,$resource,$privilege,$assert); deny($role,$resource,$privilege,$assert); 论坛系统的用户通常需要一个分级的权限系统来决定其用户的授权能力如,“Guest”(未注册用户)组允许有查看的权限;“User”(注册用户)有查看、发表、编辑的权限;“Moderator”(版主)组有查看、发表、编辑、删除等权限;而“Administrator”(管理员)组的任务包括所有其他组的内容并包括敏感的信息、用户管理、后台配置数据和备份/导出等。

16.2.3 查询ACL状态,使用ACL对象的isAllowed()方法可以对指定角色是否有指定权限进行查询该方法将会根据指定角色是否有某操作的权限而返回相应的布尔值使用格式如以下代码所示 isAllowed($role,$resource,$privilege); 以上代码中参数$role为指定的角色,可以为角色类型、字符串或者数组,默认为null;$resource为指定的资源,也可以为资源类型、字符串或者数组默认为null,指所有资源;参数$privilege为指定的权限,可以为字符串或者数组,默认的值为null,指代所有权限16.3 ACL的高级用法,上一节所介绍的ACL访问控制只是ACL最基本的用法而实际应用中可能需要更加精密的访问控制、去除访问控制列表中的某些规则、将控制列表中的信息进行存储以及有条件的权限等更多高级的ACL操作本节就来简要介绍所有这些ACL的高级用法16.3.1 精细的访问控制,本章16.2节中所介绍的ACL是对指定用户访问所有资源时设定的权限,这样的设定并不一定能满足实际应用的要求如在论坛中可能会有某一个专区,只允许固定的用户发贴子这就牵涉到指定资源的访问控制问题。

本节就来介绍下ACL更精细的访问控制 要为指定用户添加对指定的资源的某种操作的允许或者拒绝权限时,只需要使用allow()或者deny()方法的第二个参数即可这两种方法的第二个参数都表示相应的Resource(资源)类型,可以为Zend_Acl_Resource类的实例或者是字符串或者数组16.3.2 移除控制规则,在使用ACL时出于某种需要,可能需要对其中定义的控制规则进行移除这时可以通过使用ACL对象的removeAllow()方法或者removeDeny()方法,将指定规则进行移除这两个方法的使用格式分别如以下代码所示 removeAllow($role,$resource,$privilege); removeDeny($role,$resource,$privilege);,16.3.3 存储ACL到各种载体,在Zend Framework中ACL被设计为可序列化(将对象的状态信息转换为可以存储或传输的信息的过程)因此可以借用PHP中的serialize()函数,将ACL对象中的内容进行序列化,将存储在其他载体中在使用时,通过PHP的unseriailize()函数,将内容进行反序列化即可。

这两个函数的语法格式如以下代码所示 string serialize(mixed value) mixed unserialize(string str),16.3.4 有条件的访问规则,在使用ACL时,有时出于某种特殊的需要,可能需要为访问规则设定相应的条件如当普通用户的积分达到某个条件时,就允许其在管理区发表内容;再如限制某些IP的用户对所有资源的访问等这时就需要用到allow()方法的最后一个参数$assert 该参数指代的是一个Zend_Acl_Assert_Interface在Zend_Acl中使用Zend_Acl_Assert_Interface提供支持有条件的规则为了使用规则声明接口,开发者写了一个实现接口中assert()方法的类16.4 小结,本章为读者介绍了Zend Framework中的Acl组件,使用Zend_Acl可以实现不同用户对网络资源的访问控制在实际使用的过程中需要注意,由于实际用户类型繁多,各种资源及操作权限也相当复杂这时就需要为不同用户分配合理的权限,并且一定要对结果进行测试因为基于用户的继承关系,很可能出现各种关系的错乱,为系统运行造成不必要的麻场,。

下载提示
相关文档
正为您匹配相似的精品文档