博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
phalcon: acl权限控制
阅读量:4458 次
发布时间:2019-06-08

本文共 3353 字,大约阅读时间需要 11 分钟。

目录控制:

 

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.'
'; foreach($v as $ky=>$vy) { //添加资源 $acl->addResource(new \Phalcon\Acl\Resource(strtolower($k)), $vy); //添加访问权限 $acl->allow($key, strtolower($k), $vy); // echo '|--'.$k.':'.$vy.'
'; } } } 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');    }

  

 

转载于:https://www.cnblogs.com/achengmu/p/5985779.html

你可能感兴趣的文章
九度oj 题目1025:最大报销额
查看>>
数字及字符串
查看>>
【转载】OmniGraffle (二)基础绘图和模具
查看>>
一些提高开发效率的 Category
查看>>
拓扑排序基础题——排序
查看>>
转:iphone 申请证书
查看>>
Python就业方向
查看>>
一步步学习SPD2010--第二章节--处理SP网站(3)--创建网站层次架构
查看>>
TCP
查看>>
Excel常用函数大全
查看>>
团队-团队编程项目中国象棋-模块测试过程
查看>>
10个经典的C语言面试基础算法及代码
查看>>
普通的java Ftp客户端的文件上传
查看>>
视图系统
查看>>
Palindromes _easy version
查看>>
vue 小记
查看>>
CURRICULUM VITAE
查看>>
菱形缓冲器电路
查看>>
08多态
查看>>
Groovy 程序结构
查看>>