访问控制列表(ZendAcl).ppt

上传人:牧羊曲112 文档编号:6024781 上传时间:2023-09-16 格式:PPT 页数:14 大小:337.11KB
返回 下载 相关 举报
访问控制列表(ZendAcl).ppt_第1页
第1页 / 共14页
访问控制列表(ZendAcl).ppt_第2页
第2页 / 共14页
访问控制列表(ZendAcl).ppt_第3页
第3页 / 共14页
访问控制列表(ZendAcl).ppt_第4页
第4页 / 共14页
访问控制列表(ZendAcl).ppt_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《访问控制列表(ZendAcl).ppt》由会员分享,可在线阅读,更多相关《访问控制列表(ZendAcl).ppt(14页珍藏版)》请在三一办公上搜索。

1、第16章 访问控制列表(Zend_Acl),访问控制列表(ACL)是应用在路由器接口的指令列表。该指令列表用来告诉路由器哪些数据包可以接收、哪些数据包需要拒绝。至于数据包是被接收还是拒绝,可以由类似于源地址、目的地址、端口号等的特定指示条件来决定。使用Zend Framework中的Zend_Acl组件即可实现完整的访问控制。该组件提供了一整套实现访问控制列表(Access Control List)的解决方案。合理使用该类组件,可以实现用户所要求的访问控制。本章就来向读者介绍如何使用Zend_Acl组件实现访问控制功能。,16.1 资源与角色,Zend_Acl组件中定义了两个重要的概念,即资

2、源与角色。资源(Resource)是指一个被限制访问的对象;角色(Role)则是指可以发出请求来访问资源的对象。Zend_Acl组件中分别以Zend_Acl_Role类与Zend_Acl_Resource类来表示资源与角色。要创建角色与资源只需要为这些类实例化对象即可。在实例化对象时,需要为资源或者角色提供参数(详情请参见本章后面的实例代码)。,16.1.1 Zend_Acl中的资源,在Zend_Acl中,资源就是所有被访问对象的统称。如论坛中的贴子、新闻管理系统中的新闻等都可以被看作是资源。在Zend_Acl中,创建一个资源非常简单。Zend_Acl提供了Zend_Acl_Resource_

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

4、。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,

5、从本章引言中对访问控制列表的定义可以看出,ACL可以表示任何一组物理或虚拟对象。为了便于理解,这里将创建一个基本的论坛(BBS)的ACL,该ACL将维护若干个等级的组。为创建一个新的ACL对象,可以使用new关键字直接不带参数地实例化这个ACL类。,16.2.2 注册角色及定义访问控制,本节来介绍如何向已有的ACL中注册角色。要将指定的角色注册到访问控制列表中,可以使用访问控制列表实例的addRole()方法,该方法的语法格式如下所示。addRole($role,$parentrole);allow($role,$resource,$privilege,$assert);deny($role,

6、$resource,$privilege,$assert);论坛系统的用户通常需要一个分级的权限系统来决定其用户的授权能力。如,“Guest”(未注册用户)组允许有查看的权限;“User”(注册用户)有查看、发表、编辑的权限;“Moderator”(版主)组有查看、发表、编辑、删除等权限;而“Administrator”(管理员)组的任务包括所有其他组的内容并包括敏感的信息、用户管理、后台配置数据和备份/导出等。,16.2.3 查询ACL状态,使用ACL对象的isAllowed()方法可以对指定角色是否有指定权限进行查询。该方法将会根据指定角色是否有某操作的权限而返回相应的布尔值。使用格式如以

7、下代码所示。isAllowed($role,$resource,$privilege);以上代码中参数$role为指定的角色,可以为角色类型、字符串或者数组,默认为null;$resource为指定的资源,也可以为资源类型、字符串或者数组默认为null,指所有资源;参数$privilege为指定的权限,可以为字符串或者数组,默认的值为null,指代所有权限。,16.3 ACL的高级用法,上一节所介绍的ACL访问控制只是ACL最基本的用法。而实际应用中可能需要更加精密的访问控制、去除访问控制列表中的某些规则、将控制列表中的信息进行存储以及有条件的权限等更多高级的ACL操作。本节就来简要介绍所有这

8、些ACL的高级用法。,16.3.1 精细的访问控制,本章16.2节中所介绍的ACL是对指定用户访问所有资源时设定的权限,这样的设定并不一定能满足实际应用的要求。如在论坛中可能会有某一个专区,只允许固定的用户发贴子。这就牵涉到指定资源的访问控制问题。本节就来介绍下ACL更精细的访问控制。要为指定用户添加对指定的资源的某种操作的允许或者拒绝权限时,只需要使用allow()或者deny()方法的第二个参数即可。这两种方法的第二个参数都表示相应的Resource(资源)类型,可以为Zend_Acl_Resource类的实例或者是字符串或者数组。,16.3.2 移除控制规则,在使用ACL时出于某种需要,

9、可能需要对其中定义的控制规则进行移除。这时可以通过使用ACL对象的removeAllow()方法或者removeDeny()方法,将指定规则进行移除。这两个方法的使用格式分别如以下代码所示。removeAllow($role,$resource,$privilege);removeDeny($role,$resource,$privilege);,16.3.3 存储ACL到各种载体,在Zend Framework中ACL被设计为可序列化(将对象的状态信息转换为可以存储或传输的信息的过程)。因此可以借用PHP中的serialize()函数,将ACL对象中的内容进行序列化,将存储在其他载体中。在使

10、用时,通过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可以实现不同用户对网络资源的访问控制。在实际使用的过程中需要注意,由于实际用户类型繁多,各种资源及操作权限也相当复杂。这时就需要为不同用户分配合理的权限,并且一定要对结果进行测试。因为基于用户的继承关系,很可能出现各种关系的错乱,为系统运行造成不必要的麻场,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号