`
lovefly_zero
  • 浏览: 389924 次
  • 性别: Icon_minigender_1
  • 来自: 株洲
社区版块
存档分类
最新评论

Zend Framework 中的认证和授权

    博客分类:
  • PHP
阅读更多

了解 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 中文手册

    Zend_Auth 和 Zend_Acl 通过通用 的证书(credential)存储提供用户认证和授权。还有其它实现的客 户库来简化访问最流行的可用的 web 服务。 不论你的程序需要什么,你都可能从 Zend Framework 中找 到全面测试的...

    ZendFramework中文手册HTML版

    6. **服务端认证和授权(Authentication and Authorization)**:提供安全的用户身份验证和权限控制。 **三、服务导向架构(SOA)支持** Zend Framework 支持 Web 服务,包括 SOAP 和 REST。这使得开发人员能够...

    基于Zend Framework 框架的CMS PHP 源代码

    它以组件化设计著称,提供了构建企业级Web应用所需的各种功能模块,如数据库访问、表单处理、缓存、认证和授权等。Zend Framework推崇“选择性使用”原则,开发者可以根据项目需求选择使用其中的部分或全部组件,极...

    zend framework 中文版手册(最新)

    **Zend Framework 中文版手册详解** Zend Framework 是一个开源、基于组件的 PHP 框架...通过这份中文版手册,开发者可以深入理解 Zend Framework 的各个组件,掌握其核心概念和最佳实践,从而在实际项目中游刃有余。

    zend framework 1.7.5 使用基本例子

    在实际开发中,你可能还会涉及到表单处理、认证授权、缓存、邮件发送等多个方面。Zend Framework 提供了一系列组件来支持这些功能,使得开发者能够构建复杂、健壮的应用程序。 总之,通过 Zend Studio 6 和 Zend ...

    ZendFramework最新版本

    在 Zend Framework 中,模型处理业务逻辑和数据管理,视图负责显示数据,而控制器则作为两者之间的协调者,处理用户输入并决定如何响应。 2. **Zend Framework 1.11.10 特性** - **组件化设计**:Zend Framework ...

    zend framework教程.zip

    7. **Zend_Auth** 和 **Zend_Acl**:身份验证和访问控制,实现用户认证和授权。 ### 三、Zend Framework 学习路径 1. **环境搭建**:了解 Zend Framework 的安装和配置方法,包括Composer集成和自定义设置。 2. *...

    最新zend framework 中文手册

    10. **安全设置**: 配置`Zend_Auth`和`Zend_Acl`,实现用户认证和授权。 **学习资源** - **官方文档**: 官方提供的详尽指南,涵盖了框架的所有组件和功能。 - **示例代码**: 通过示例代码理解框架的用法和最佳实践...

    Zend Framework技术大全源码

    7. **认证与授权**:理解 Zend_Auth 和 Zend_Acl 机制,实现用户身份验证和权限控制。 8. **服务化和API开发**:利用 Zend_Servicemanager 和 Zend_Http 客户端,构建和消费RESTful API。 9. **错误处理与日志记录**...

    Zend Framework2.0帮助文档

    5. 模块使用:Zend Framework 2.0采用模块化设计,文档中应该会解释如何创建和配置模块,以及如何将新模块集成到现有应用中。 6. 路由和控制器:该部分可能会详细说明如何设置和配置路由,以及如何设计控制器来响应...

    ZendFramework-1.11.11minimal

    6. **安全特性**:框架内置了多种安全措施,如输入验证(Zend_Validate)、认证(Zend_Auth)和授权(Zend_Acl),以及对跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的防护。 7. **国际化与本地化**:Zend_Locale ...

    Zend Framework中文手册

    包括输入过滤(`Zend_Filter` 和 `Zend_Validate`)、输出编码(`Zend_Escape`)、认证(`Zend_Auth`)和授权(`Zend_Acl`)等安全功能,为Web应用程序提供了全面的安全保障。 11. **文件上传和下载** `Zend_File...

    Zend Framework 中文手册

    1. **Zend Framework** 是一个全功能的 PHP 开发框架,它提供了构建 Web 应用程序和服务所需的多种组件,如 MVC(Model-View-Controller)、数据库访问、表单处理、缓存、认证和授权等。 2. **MVC** 模式是 Zend ...

    ZendFramework-2.4.3.zip

    在 `ZendFramework-2.4.3` 压缩包中,你可以找到这些组件的具体实现和示例代码,通过学习和实践,能够深入了解和掌握 Zend Framework 2 的核心功能。这个版本的发布旨在修复已知问题,提升框架的稳定性和性能,确保...

    zendframework3.0框架

    此外,ZF3还提供了`Router`和`Controller`来处理HTTP请求,`View`系统用于渲染响应,以及一系列数据库抽象层和认证/授权组件,这些都是构建Web应用的基础。 在不安装Composer的情况下,虽然可以直接使用提供的...

    ZendFramework-1.11.10-manual-zh.zip

    `Zend_Auth`和`Zend_Acl`则是处理认证和授权的关键组件。`Zend_Auth`提供了一种统一的方式来验证用户身份,而`Zend_Acl`则定义了访问控制列表,用于决定用户或角色对资源的访问权限。这两者结合,可以帮助开发者构建...

    zendframework1.12

    9. **认证与授权**:Zend_Auth 和 Zend_Acl 分别处理应用程序的认证(验证用户身份)和授权(决定用户权限),提供安全的用户管理。 10. **缓存机制**:Zend_Cache 提供了多种缓存后端(如文件、内存、数据库等),...

    zend_framework中文手册

    安全是 Zend Framework 的重要考量,它包含了认证、授权、CSRF 防护、XSS 防护等多个方面。例如,Zend_Auth 和 Zend_Acl 可用于用户身份验证和权限控制,防止未授权访问。 **9. 国际化与本地化** 通过 Zend_Locale ...

    Zend FrameWork 中文教程

    - 这份文档可能是关于 Zend Framework 中的认证功能的简体中文教程,详细解释了如何使用`Zend_Auth`组件实现用户身份验证,可能包括身份验证适配器、持久化存储和错误处理等方面。 通过阅读这些文档,你将能够掌握 ...

    ZendFramework-1.12.9 手册 (HTML版)

    2. **企业级特性**:支持企业级的安全、性能和可扩展性,如安全的输入验证、输出过滤、认证和授权机制。 3. **MVC架构**:遵循 MVC 设计模式,使代码结构清晰,易于维护和扩展。 4. **兼容性**:与 PHP5.2.5 及以上...

Global site tag (gtag.js) - Google Analytics