了解 ZF 的人,应该对 ZF 的权限管理印象深刻。ZF 手册在第一章的简介之后,第二章就拉出 Zend_Acl(访问控制授权)来介绍,而第三章就是Zend_Auth 的内容(认证)。从知识认知的逻辑顺序上,我个人感觉这样安排是不合适的。事实上第二和第三章的内容介绍,牵扯了许多后续章节的内容,我们不得不从第 7 章 Zend_Controller 开始看起。(注:后来了解到,Zend 的手册,是由志愿者翻译的,章节是以字母为顺序的!哈~~除过字典,我还没见过什么书是这么排列内容的!)
但是不得不承认 ZF 的认证和授权是个优秀的设计。ZF 的认证相对简单,我们可以直接连接数据库表,对用户输入的用户名和密码进行比较,确认当前用户的身份。还提供了摘要式认证等方法。而 ACL(访问控制列表)提供的授权就很强大。
ACL 提出了资源、角色、动作(访问)三个概念,用这些概念可以轻易构造一个强大的权限管理系统。而且权限管理可以细化到模块下的浏览、添加、删除、修改等细微动作。(ASP.NET 只能控制到页面(模块)级别,更细致的控制需要程序员自己设计和实现)。这里粘一些代码,仅仅是说明一下(在 IIS6.0 + ZF1.51 + Apache2.2 下调试的):
//4种角色:admin, editor, guest, auditor, poweruser
//4种资源:channel, item, bbs, blog
//3种动作:view, edit, revise
//要求:
//admin对所有资源有所有权限
//guest对所有资源只有view权限
//editor对channel, item, bbs有view, edit权限
//auditor对channel, item, bbs, blog有revise权限
//poweruser继承editor, auditor权限
//定义角色
$acl = new Zend_Acl();
$roleAdmin = new Zend_Acl_Role('admin');
$acl->addRole($roleAdmin);
$roleEditor = new Zend_Acl_Role('editor');
$acl->addRole($roleEditor);
$roleGuest = new Zend_Acl_Role('guest');
$acl->addRole($roleGuest);
$roleAuditor = new Zend_Acl_Role('auditor');
$acl->addRole($roleAuditor);
$rolePoweruser = new Zend_Acl_Role('poweruser');
$acl->addRole($rolePoweruser, array('editor', 'auditor'));
//添加资源
$acl->add(new Zend_Acl_Resource('channel'));
$acl->add(new Zend_Acl_Resource('item'));
$acl->add(new Zend_Acl_Resource('bbs'));
$acl->add(new Zend_Acl_Resource('blog'));
//分配权限
//admin:
$acl->allow($roleAdmin, null, null);
//editor:
$acl->allow('editor', array('channel', 'item', 'bbs'), array('view', 'edit'));
//guest:
$acl->allow('guest', null, 'view');
//auditor:
$acl->allow('auditor', array('channel', 'item', 'bbs', 'blog'), array('revise'));
//poweruser(从 editor, auditor 继承权限),可以再叠加另外的权限
//$acl->allow('poweruser', null, null);
//给所有角色分配权限(包括 admin)
//$acl->allow(null, '', '');
//$acl->deny(null, '', '');
查看以上代码的最终权限,可以参考一下代码:
foreach (array('admin', 'editor', 'guest', 'auditor', 'poweruser') as $role)
{
echo '<br>' . '角色 ' . $role . '<br>';
echo '<table border=1>';
echo '<tr><td align=center>\</td><th>channel</th><th>item</th><th>bbs</th><th>blog</th></tr>';
foreach (array('view', 'edit', 'revise') as $right)
{
echo '<tr>';
echo '<th>'. $right .'</th>';
foreach (array('channel', 'item', 'bbs', 'blog') as $resource)
{
echo '<td>';
echo $acl->isAllowed($role, $resource, $right)?"allowed" : "denied";
echo '</td>';
}
echo '</tr>';
}
echo '</table>';
}
}
这些资源、角色、动作,在以上代码片段里,是作为硬编码存在的,实际项目中,可以作为数据在数据库里保存。灵活应用就需要程序员的智慧了。
ZF 的用户,只划分到“角色”这一级,也就是说,不能给某个用户直接分配权限。这肯定是出于简化设计而考虑的,否则设计和实现会复杂的多!这个有个小缺点,就是要为一个用户分配权限,必须首先建一个角色(相当于用户组),再把该用户加入到该角色下,通过角色来给该用户分配权限。而权限设计中,用户、角色、资源、动作的相互包含、交叉,其结果导致问题变得非常复杂!这么复杂的逻辑关系,不借助其他工具(例如计算机),人的大脑大多数情况下是很难想明白的。
张庆(网眼)文章出处phpchina
分享到:
相关推荐
zend framework中英文手册,包含中文手册,英文手册两个版本。
Table of Contents •Introduction to Zend Framework •Overview •Installation •Learning Zend Framework •Zend Framework Quick Start •Autoloading in Zend Framework •Plugins in Zend Framework •...
和ZendFrameworkS一起成长1.43中文.pdf MD5: B7502E29FC327151BD970870AE8CD189 SHA1: 7BCA3DCD5F57885D0204BF867C53B6C27953F91C CRC32: 20A1FC7E Zend Framework 中文 手册 2008年12月01日.chm MD5: DD29C39D12E9...
Zend_Auth 和 Zend_Acl 通过通用 的证书(credential)存储提供用户认证和授权。还有其它实现的客 户库来简化访问最流行的可用的 web 服务。 不论你的程序需要什么,你都可能从 Zend Framework 中找 到全面测试的...
zend framework zendframework manual 手册,Zend Framework手册 中文版,有一部分还没有汉化
Whether you are learning Zend framework from scratch or looking to sharpen up your skills from previous versions, Zend Framework 2 Application Development will help you to harness the power of Zend ...
Zend Framework 2 官方教程汉化版
zendFramework中文手册
自己编译的里面包含 ZendFramework 1.11.4 中文帮助手册 ZendFramework 1.11.4 api doc ZendFramework 1.11.4 的一个guestbook。 想要就下,不想要就看看.
ZendFramework 1.12.9 代码和文档.rar
zendframework1.9中文版用户手册 直接从网站上下载的离线版本 非常方便 这个是.chm的 还有.exe的版本,方便大家使用。
ZendFramework-1.10.4
zend framework 中文手册,详细为你讲解zend framework使用
最新的zend framework 中文手册 1.11.9,详细介绍了利用 zend framework 开发php 应用
Zend Framework中文手册,网友们好好利用!
zend framework中文文档 PHP的东西哦。
Zend Framework手册 中文版 2009-08-01
zend framework1.0 中文教程
1. Introduction to Zend Framework 1.1. 概述 1.2. 安装 2. Zend_Acl 2.1. 简介 2.1.1. 关于资源(Resource) 2.1.2. 关于角色(Role) 2.1.3. 创建访问控制列表(ACL) 2.1.4. 注册角色(Role) 2.1.5. 定义访问...
1. Introduction to Zend Framework 1.1. 概述 1.2. 安装 2. Zend_Acl 2.1. 简介 2.1.1. 关于资源(Resource) 2.1.2. 关于角色(Role) 2.1.3. 创建访问控制列表(ACL) 2.1.4. 注册角色(Role) 2.1.5. 定义访问...