`

CakePHP项目中引入Auth & Acl 控制

阅读更多

PS:原创文章,如需转载,请注明出处,谢谢!     

本文地址:http://flyer0126.iteye.com/blog/2212975

 

     在此简单记录操作步骤,以备后期查阅。

     一、引入auth /app/Controller/AppController.php

class AppController extends Controller {
    public $components = array(
        'Acl',
        'Auth' => array(
            'authorize' => array(
                'Actions' => array('actionPath' => 'controllers')
            )
        ),
        'Session'
    );
    public $helpers = array('Html', 'Form', 'Session');

    public function beforeFilter() {
        //Configure AuthComponent
        $this->Auth->loginAction = array(
          'controller' => 'users',
          'action' => 'login'
        );
        $this->Auth->logoutRedirect = array(
          'controller' => 'users',
          'action' => 'login'
        );
        $this->Auth->loginRedirect = array(
          'controller' => 'posts',
          'action' => 'add'
        );
    }
}

     二、生成acl表

./Console/cake schema create DbAcl

  三、添加组及用户

    设置Model文件 /app/Model/User.php

class User extends AppModel {
    public $belongsTo = array('Group');
    public $actsAs = array('Acl' => array('type' => 'requester'));

    public function parentNode() {
        if (!$this->id && empty($this->data)) {
            return null;
        }
        if (isset($this->data['User']['group_id'])) {
            $groupId = $this->data['User']['group_id'];
        } else {
            $groupId = $this->field('group_id');
        }
        if (!$groupId) {
            return null;
        }
        return array('Group' => array('id' => $groupId));
    }
    public function bindNode($user) {
        return array('model' => 'Group', 'foreign_key' => $user['User']['group_id']);
    }
 }

    文件 /app/Model/Group.php

class Group extends AppModel {
    public $actsAs = array('Acl' => array('type' => 'requester'));

    public function parentNode() {
        return null;
    }
}

    利用bake生成Users、Groups的mvc文件,添加组及用户,生成aros数据。

四、利用AclExtras 生成aco表数据
下载AclExtras 安装至/app/Plugin/ 目录下
//app/Config/boostrap.php
// ...
CakePlugin::load('AclExtras');
  利用bash命令生成可用的acos数据
./Console/cake AclExtras.AclExtras aco_sync
  五、补充login及logout
<!-- login.ctp -->
<h2>Login</h2>
<?php
echo $this->Form->create('User', array(
    'url' => array(
        'controller' => 'users',
        'action' => 'login'
    )
));
echo $this->Form->input('User.username');
echo $this->Form->input('User.password');
echo $this->Form->end('Login');
?>
############分割线########
// action
public function login() {
    if ($this->Session->read('Auth.User')) {
        $this->Session->setFlash('You are logged in!');
        return $this->redirect('/');
    }
}
 
public function logout() {
    $this->redirect($this->Auth->logout());
}
  六、ACO相关
    acos 的展示利用TreeBehavior
// /app/Model/Aco.php 文件
public $actsAs = array('Tree');
public $displayField = 'alias';

// 输出
$this->Aco->generateTreeList(null, null, null, '&nbsp;&nbsp;&nbsp;');
  七、权限分配
public function initDB() {
    $group = $this->User->Group;

    // Allow admins to everything
    $group->id = 1;
    $this->Acl->allow($group, 'controllers');

    // allow managers to posts and widgets
    $group->id = 2;
    $this->Acl->deny($group, 'controllers');
    $this->Acl->allow($group, 'controllers/Posts');
    $this->Acl->allow($group, 'controllers/Widgets');

    // allow users to only add and edit on posts and widgets
    $group->id = 3;
    $this->Acl->deny($group, 'controllers');
    $this->Acl->allow($group, 'controllers/Posts/add');
    $this->Acl->allow($group, 'controllers/Posts/edit');
    $this->Acl->allow($group, 'controllers/Widgets/add');
    $this->Acl->allow($group, 'controllers/Widgets/edit');

    // allow basic users to log out
    $this->Acl->allow($group, 'controllers/users/logout');

    // we add an exit to avoid an ugly "missing views" error message
    echo "all done";
    exit;
}
八、整理
/**
     * custom beforeFilter
     */
    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('XXX');
        // $this->Auth->allow();
    }
 
 

 

分享到:
评论

相关推荐

    cakephp中acl详解.rar

    在 CakePHP 中,Access Control List(ACL,访问控制列表)是一个强大的工具,用于管理用户对资源的访问权限。本教程将深入探讨CakePHP的ACL系统,以便你能够有效地实现安全的用户权限管理。 **1. ACL基本概念** ...

    cakephp-jwt-auth, 使用JSON网络令牌进行身份验证的CakePHP插件.zip

    cakephp-jwt-auth, 使用JSON网络令牌进行身份验证的CakePHP插件 CakePHP认证插件 包含AuthComponent类认证的插件,用于使用 JSON网络令牌进行身份验证。 你可以在这里详细阅读关于JSON网络令牌规范的详细说明。要求...

    cakephp中acl详解

    在CakePHP中,Access Control List(ACL)是一个强大的工具,用于管理应用程序中的权限和访问控制。让我们深入探讨一下CakePHP中的ACL系统。 ### ACL基础概念 **1. ACO (Access Control Object)**:ACO代表要控制...

    cakephp-jwt-auth:一个CakePHP插件,用于使用JSON Web令牌进行身份验证

    composer require admad/cakephp-jwt-auth 用法 使用Cake的控制台加载插件: ./bin/cake plugin load ADmad/JwtAuth 配置: 设置AuthComponent : // In your controller, for e.g. src/Api/AppController.php ...

    cakephp手册详细讲解

    ACL控制 数据清理 (YY友情参与) Cake Session Component (papa友情参与) The Request Handler Component The Security Component 视图(View)缓存 简单用户认证示例 Cake的命名约定 (YY友情参与) 版

    cakephp中文手册API

    MVC模式是软件设计中的一个经典模式,将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个部分。模型负责处理数据和业务逻辑,视图负责展示数据,控制器则作为两者之间的协调者。 2. **路由...

    CakePHP 1.2 API 中文文档

    在 CakePHP 中,MVC模式是核心设计思想。Model代表数据模型,处理与数据库的交互;View负责展示用户界面;Controller作为模型和视图之间的桥梁,处理用户请求并调用相应的模型方法,然后将数据传递给视图进行渲染。 ...

    acl:用于在CakePHP 3应用程序中管理ACL的插件

    一个用于在CakePHP应用程序中管理ACL的插件。 插件尚处于初始开发阶段,我最近开始使用cakephp,请发送建议和建设性批评。 通过composer安装 您可以使用composer 安装此插件。 将以下依赖项添加到您的composer....

    cakephp-1.3.21.zip

    1. 插件:提供可复用的代码库,如Auth用于身份验证,Acl处理权限控制。 2. 组件:类似PHP的类,封装通用功能,如RequestHandler处理HTTP请求类型。 总结,CakePHP 1.3.21是一个功能丰富的PHP框架,通过遵循MVC架构...

    cakephp中文手册

    在阅读这份中文手册时,你将了解到如何设置和配置CakePHP项目,创建数据库模型,建立控制器和视图,使用路由来定义URL结构,以及如何利用组件和行为来扩展功能。此外,手册还会涵盖测试、部署和性能优化等相关主题。...

    cakephp 框架书籍 英文版

    - **AppController**:介绍了CakePHP中默认的控制器类`AppController`,以及如何继承它来创建自己的控制器。 - **请求参数**:解释了如何处理HTTP请求中的各种参数,如GET、POST数据等。 - **控制器动作**:讲解了...

    CakePHP使用ajax传值

    在CakePHP中,推荐使用jQuery库,因此需要在用户界面文件(如user_normal.ctp)中引入jquery库的脚本文件。由于文档中提到的是jquery-1.4.4.min.js,这表明应使用压缩版的jQuery库来减少传输的数据量,提高页面加载...

    AclManager:用于管理 CakePHP 2.x 的 Acl 的插件

    该插件允许您通过 Acl 模块轻松管理 CakePHP 2.x 中的权限。 从更新和修复原始源 特征 管理每个节点的权限 更新缺少 ARO(用户、角色等)的数据库 更新缺少 ACO 的数据库(控制器操作) 撤销所有权限 要求 蛋糕...

    cakephp中文手册.pdf

    这个目录下有子目录如`config`(配置文件,如数据库和访问控制列表ACL)、`controllers`(控制器文件)、`models`(模型文件)、`views`(视图文件)等。 2. **cake**:这是 CakePHP 的核心库,通常不应直接修改。...

    cakephp 中文文档

    - **插件(Plugin)**:是包含了一组特定功能的独立包,可以轻松地在多个项目中复用。例如,用户管理系统或博客系统等都可以设计成插件的形式。 通过以上介绍,我们可以看出 CakePHP 不仅在基本的 MVC 架构上进行了...

    cakephp 中文手册

    它代表数据库中的表或数据源,处理业务逻辑,并与视图和控制器交互。 2. **视图(View)**:视图层主要负责展示数据,将模型中的数据转化为用户友好的格式。它通常包含HTML、CSS和JavaScript代码,但不包含业务逻辑...

    CakePHP 1.3中文帮助文档

    CakePHP 1.3中文帮助文档,内容简单易懂并且全面,值得大家下载...

    CakePHP-Stateless-Auth:完全和严格无状态的替代CakePHP AuthenticationAuthorization组件。 设计用于仅通过REST方式访问的Cake应用程序

    CakePHP无状态AuthComponent 完全和严格无状态的替代CakePHP身份验证/授权组件。 设计用于仅通过REST访问的Cake应用程序。 提供的组件旨在替代Cake的库存AuthCompnent 。 此替代StatelessAuthComponent是经过精简和...

    CakePHP中文手册

    10. **插件(Plugin)**:插件是独立的CakePHP应用,可以方便地集成到项目中,提供了模块化开发的可能性。 11. **错误处理与调试**:涵盖了错误报告、日志记录和调试工具,如DebugKit,它是一个可视化的工具集,...

    CakePHP manual zh 中文手册

    组件是可复用的代码块,常用于控制器中,如`AuthComponent`用于用户身份验证。 ### 11. ACL(访问控制列表) 蛋糕PHP提供了基于角色的访问控制,通过ACL,你可以精细控制哪些用户或角色可以访问哪些资源。 ### 12....

Global site tag (gtag.js) - Google Analytics