目录控制:

public/index.php:

$di['aclResource']=function(){
return include_once '../app/config/frontbackAcl.php';
};
$di['dispatcher'] = function(){
$eventManager = new \Phalcon\Events\Manager();
$securyDeep = new SecurityDeep();
$eventManager->attach("dispatch", $securyDeep);
$dispatch = new \Phalcon\Mvc\Dispatcher();
$dispatch->setEventsManager($eventManager);
return $dispatch;
};

  

app/config/frontbackAcl.php:

return new \Phalcon\Config(array(

        'Manager'=> array(
'rote'=>new \Phalcon\Acl\Role("Manager"),
'resource'=>array(
'Index'=> array("index", 'last', 'login', 'signup'),
'Register'=> array('index', 'doing'),
'Delete'=>array('index', 'delete')
)
),
'Operator'=>array(
'rote'=>new \Phalcon\Acl\Role("Operator"),
'resource'=>array(
'Index'=> array("index", 'last', 'login','signup'),
'Register'=> array('index', 'doing'),
)
) ));

  

securityDeep.php:

use \Phalcon\Mvc\User\Plugin,
\Phalcon\Events\Event,
\Phalcon\Mvc\Dispatcher;
class SecurityDeep extends Plugin { public function __construct() { } public function _getAcl()
{
$acl = new \Phalcon\Acl\Adapter\Memory();
//默认权限
$acl->setDefaultAction(\Phalcon\Acl::DENY);
//创建
$allResource = $this->_callAcl();
foreach($allResource as $key=>$value)
{
//创建角色,并将角色添加到acl
$acl->addRole($value['rote']);
//var_dump($value['rote']);
foreach($value['resource'] as $k=>$v)
{
//echo $k.'<br>';
foreach($v as $ky=>$vy)
{
//添加资源
$acl->addResource(new \Phalcon\Acl\Resource(strtolower($k)), $vy);
//添加访问权限
$acl->allow($key, strtolower($k), $vy);
// echo '|--'.$k.':'.$vy.'<br>';
}
}
}
return $acl;
}
public function _callAcl()
{
if($this->persistent->acl == null) {
$this->persistent->acl = $this->aclResource;
}
return $this->persistent->acl;
} public function beforeExecuteRoute(Event $event, Dispatcher $dispatcher)
{
$controller = $dispatcher->getControllerName();
$action = $dispatcher->getActionName();
$role = '';
if( $this->session->has('userInfo'))
{
$managerInfo = $this->session->get('userInfo');
$role = $managerInfo['role'];
}
if(empty($role)) $role = 'Operator';
$acl = $this->_getAcl();
$isAllowed = $acl->isAllowed($role, strtolower($controller), strtolower($action));
if(!$isAllowed)
{
//echo "no access";exit;
        
$dispatcher->forward(array(
'controller'=>'index',
'action'=>'error',
'params'=>array('msg'=>'no access')
));
} } }

  

那么,在indexController.php页面中,可以通过如下方法,获取params传过来的值:

public function errorAction()
{
//获取传过来的参数
$param = $this->dispatcher->getParams();
$msg = isset($param['msg'])? $param['msg'] : '' ; $this->view->web_title = '错误';
$this->view->pick('index/error');
}

  

phalcon: acl权限控制的更多相关文章

  1. phalcon: 目录分组后的acl权限控制

    phalcon: 目录分组后的acl权限控制 楼主在做acl权限的时候,发现官方的acl只能针对未分组的目录,如下: app/ ___|./controller ___|./logic ___|./p ...

  2. zookeeper的ACL权限控制

    ACL:Access Control List  访问控制列表 1.  简介 0.概述 ACL 权限控制,使用:scheme:id:perm 来标识,主要涵盖 3 个方面: 权限模式(Scheme): ...

  3. Linux系统——ACL权限控制及特殊权限

    ACL权限控制 ACL(access control list),可以提供除属主.属组.其他人的rwx权限之外的细节权限设定 ACL的权限控制 (1)User 使用者 (2)Group 群组 (3)M ...

  4. 1.ZooKeeper ACL权限控制

    参考:https://blog.csdn.net/liuxiao723846/article/details/79391650 ZK 类似文件系统,Client 可以在上面创建节点.更新节点.删除节点 ...

  5. ZooKeeper学习之路(五)—— ACL权限控制

    一.前言 为了避免存储在Zookeeper上的数据被其他程序或者人为误修改,Zookeeper提供了ACL(Access Control Lists)进行权限控制.只有拥有对应权限的用户才可以对节点进 ...

  6. ZooKeeper系列(五)—— ACL 权限控制

    一.前言 为了避免存储在 Zookeeper 上的数据被其他程序或者人为误修改,Zookeeper 提供了 ACL(Access Control Lists) 进行权限控制.只有拥有对应权限的用户才可 ...

  7. 面试题解析|ACL权限控制机制

    ACL(Access Control List)访问控制列表 包括三个方面: 一.权限模式(Scheme) 1.IP:从 IP 地址粒度进行权限控制 2.Digest:最常用,用类似于 usernam ...

  8. ACL 权限控制机制 ?

    UGO(User/Group/Others) 目前在 Linux/Unix 文件系统中使用,也是使用最广泛的权限控制方式.是一种粗 粒度的文件系统权限控制模式. ACL(Access Control ...

  9. ACL 权限控制机制 ?

    UGO(User/Group/Others) 目前在 Linux/Unix 文件系统中使用,也是使用最广泛的权限控制方式.是一种粗 粒度的文件系统权限控制模式. ACL(Access Control ...

随机推荐

  1. Android的BroadcastReceiver 广播 短信拦截

    如何去理解BroadcastReceiver(广播)?其实可以这样想,首先我们要有一个发送广播的"媒体",在这个例子中,我们暂且用activity组件作为这个媒体,当然以后会用到s ...

  2. ADO,NET 实体类 和 数据访问类

    啥也不说,看代码. --SQl中 --建立ren的数据库,插入一条信息 create database ren go use ren go create table xinxi ( code ) pr ...

  3. 【leetcode❤python】 290. Word Pattern

    #-*- coding: UTF-8 -*-class Solution(object):    def wordPattern(self, pattern, str):        "& ...

  4. JAVA WEB SpringMVC+Spring+hibernate 框架搭建【转】

    http://my.oschina.net/Thinkeryjgfn/blog/158951

  5. jquery之clone()方法详解

    clone()函数用于克隆当前匹配元素集合的一个副本,并以jQuery对象的形式返回.你也可以简单地理解为:克隆当前jQuery对象. 你还可以指定是否复制这些匹配元素(甚至它们的子元素)的附加数据( ...

  6. [HDOJ5773]The All-purpose Zero(贪心,DP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5773 题意:给n个数,其中0可以用任何数字代替,问如何替换0使整个数列中的LIS最长. 0可以用任何数 ...

  7. Zookeeper未授权访问

    l 漏洞名称: zookeeper未授权访问 l  漏洞影响版本: zookeeper l  漏洞细节: ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubb ...

  8. Sqlserver2008日志压缩

    SqlServer2008日志压缩语句如下: USE [master] GO ALTER DATABASE DBName SET RECOVERY SIMPLE WITH NO_WAIT GO ALT ...

  9. ABAP Enhancement:第一部分

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  10. SQL Server 小技巧【2】

    --1.不要使用×来查询所有字段 SELECT * FROM DBO.tb1 --改为 SELECT FName,PWD,CreateDate FROM DBO.tb1 (NOLOCK) --2.查询 ...