目录控制:

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. Python中通过cx_Oracle访问数据库遇到的问题总结

    以下是Python中通过cx_Oracle操作数据库的过程中我所遇到的问题总结,感谢我们测试组的前辈朱勃给予的帮助最终解决了下列两个问题:     1)安装cx_Oracle会遇到的问题:在Windo ...

  2. centOS6.5安装SUN-jdk7

    一.下载SUN-JDK1.7.tar.gz文件他 地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1 ...

  3. UPDATE语句:将一个表里的字段更新到另一个表的字段里的语句

    update table2 b,(select b.area_id as arid,sum(a.user_amount) as bcount from table1 a,table2 b where ...

  4. Objective-C协议与非正式协议

    http://blog.csdn.net/siemenliu/article/details/7836499

  5. 【leetcode❤python】169. Majority Element

    #Method 1import math class Solution(object):    def majorityElement(self, nums):        numsDic={}   ...

  6. [SAP ABAP开发技术总结]搜索帮助Search Help (F4)

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

  7. 使用Jmeter进行简单的http接口测试

    1.添加线程组:在“测试计划”上点击鼠标右键-->添加-->threads(Users)-->线程组,添加测试场景设置组件,接口测试中一般设置为1个“线程数”,根据测试数据的个数设定 ...

  8. CSS笔记(十一)CSS3之边框

    参考:http://www.w3school.com.cn/css3/css3_border.asp 圆角边框 <!DOCTYPE html> <html> <head& ...

  9. SQL查询语句 group by后, 字符串合并

    合并列值 --******************************************************************************************* 表 ...

  10. Java I/O 对象序列化

    我们知道对象的持持久化有三种方式: 1: 对象序列化 2: XML 3: 数据库技术 序列化可以帮助使得对象的生命周期不取决与程序是否正在执行,它可以生存于程序的调用之间. 只要将任何对象序列化到单一 ...