phalcon: 目录分组后的acl权限控制
phalcon: 目录分组后的acl权限控制
楼主在做acl权限的时候,发现官方的acl只能针对未分组的目录,如下:
- app/
- ___|./controller
- ___|./logic
- ___|./plugins
- ___|./models
- ..............
但是对分组不支持,后来想想,是支持的.分组的目录如下
- app/
- ___|./admin/
- __________|./controllers
- __________|./logic
- __________|./views
- __________|./module.php
- ___|./home/
- __________|./controllers
- __________|./logic
- __________|./views
- __________|./module.php
- .........................................
那么可以将,如下代码,直接加入到,分组目录下的 module.php代码中
- $di['aclResource']=function(){
- return include_once '../app/configs/frontAcl.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;
- };
全代码:
- use Phalcon\Loader,
- Phalcon\Mvc\Url,
- Phalcon\Mvc\Dispatcher,
- Phalcon\DiInterface,
- Phalcon\Mvc\ModuleDefinitionInterface,
- Phalcon\DI\Injectable,
- Phalcon\Mvc\Router;
- class Module extends Injectable implements ModuleDefinitionInterface
- {
- /**
- * Registers the module auto-loader
- */
- public function registerAutoloaders(DiInterface $dependencyInjector = null)
- {
- $loader = new Loader();
- $loader->registerNamespaces(array(
- 'App\Home\Controllers' => __DIR__ .'/controllers/'
- ))->register();
- $loader->registerDirs(
- array(
- 'modelsDir' => '../app/models/',
- 'pluginsDir' => '../app/plugins/',
- )
- )->register();
- }
- /**
- * Registers the module-only services
- *
- * @param DiInterface $di
- */
- public function registerServices(DiInterface $di)
- {
- $di['aclResource']=function(){
- return include_once '../app/configs/frontAcl.php';
- };
- $di['dispatcher'] = function(){
- $eventManager = new \Phalcon\Events\Manager();
- $securyDeep = new \SecurityHome();
- $eventManager->attach("dispatch", $securyDeep);
- $dispatch = new \Phalcon\Mvc\Dispatcher();
- $dispatch->setEventsManager($eventManager);
- return $dispatch;
- };
- /**
- * @return mixed
- */
- $di['baseUrl'] = function () {
- $url = new Url();
- $url->setBaseUri('/');
- return $url;
- };
- /**
- * 设置view
- */
- $di->set('view', function () use($di) {
- $view = new \Phalcon\Mvc\View();
- //var_dump($di['modules']['home']['viewsDir']);exit;
- $view->setViewsDir(BASE_PATH . $di['modules']['home']['viewsDir']);
- $view->registerEngines(array(
- '.phtml' => 'Phalcon\Mvc\View\Engine\Php'
- ));
- return $view;
- });
- }
- }
acl文件:
- return new \Phalcon\Config(array(
- 'Manager'=>array(
- 'rote'=> new \Phalcon\Acl\Role("Manager"),
- 'resource'=>array(
- //登录
- 'Index'=> array("index", 'error'),
- //用户中心
- 'User'=> array("center", 'password','editcenter','editpwd','login','loginout'),
- //verzhun登录
- 'Veryzhun'=>array('login','logining'),
- //默认所有权限
- 'Capacity'=>array('index','airline','route'),
- 'Clearance'=>array('airport','route'),
- 'Operate'=>array('factor','compare'),
- 'Traffic'=>array('index','history','monitor'),
- 'Utilization'=>array('moment','night'),
- )
- ),
- 'Operator'=>array(
- 'rote'=> new \Phalcon\Acl\Role("Operator"),
- 'resource'=>array(
- 'Index'=> array("index", 'error'),
- 'User'=> array("center", 'password','editcenter','editpwd','login','loginout'),
- 'Veryzhun'=>array('login','logining'),
- 'Traffic'=>array('index','history','monitor'),
- //默认所有权限
- //'Capacity'=>array('index','airline','route'),
- 'Clearance'=>array('airport','route'),
- 'Operate'=>array('factor','compare'),
- 'Traffic'=>array('index','history','monitor'),
- 'Utilization'=>array('moment','night'),
- )
- )
- ));
权限验证:
- /**
- * 权限控制
- */
- use \Phalcon\Mvc\User\Plugin,
- \Phalcon\Events\Event,
- \Phalcon\Mvc\Dispatcher;
- class SecurityHome extends Plugin{
- public function __construct() { }
- public function _getAcl()
- {
- $acl = new \Phalcon\Acl\Adapter\Memory();
- //默认权限禁止
- $acl->setDefaultAction(\Phalcon\Acl::DENY);
- //读取所有权限
- $aclResource = $this->_callAcl();
- if(!empty($aclResource))
- {
- foreach ($aclResource as $key=>$value)
- {
- //创建角色到acl
- $acl->addRole($value['rote']);
- //所有的操作
- foreach ((array)$value['resource'] as $k=>$v)
- {
- //echo $k.'<br>';
- foreach((array)$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['Operator']['rote'] == null)
- {
- $this->persistent->acl = $this->aclResource;
- }
- return $this->persistent->acl;
- }
- /**
- * 事件触发
- * @param Event $event
- * @param Dispatcher $dispatcher
- */
- public function beforeExecuteRoute(Event $event, Dispatcher $dispatcher)
- {
- $controller = $dispatcher->getControllerName();
- $action = $dispatcher->getActionName();
- //权限
- $role = 'Operator';
- $acl = $this->_getAcl();
- $isAllowed = $acl->isAllowed($role, strtolower($controller), strtolower($action));
- if(!$isAllowed)
- {
- $dispatcher->forward(array(
- 'controller'=>'index',
- 'action'=>'error',
- 'params'=>array('msg'=>'no access')
- ));
- //echo "no access";
- //exit;
- }
- }
- }
接收获取到的数据:
- /**
- * 提示页面
- */
- public function errorAction()
- {
- //获取传过来的参数
- $param = $this->dispatcher->getParams();
- $msg = isset($param['msg']) ? $param['msg'] : '' ;
- $this->view->web_title = '错误';
- $this->view->pick('index/error');
- }
phalcon: 目录分组后的acl权限控制的更多相关文章
- Linux系统——ACL权限控制及特殊权限
ACL权限控制 ACL(access control list),可以提供除属主.属组.其他人的rwx权限之外的细节权限设定 ACL的权限控制 (1)User 使用者 (2)Group 群组 (3)M ...
- zookeeper的ACL权限控制
ACL:Access Control List 访问控制列表 1. 简介 0.概述 ACL 权限控制,使用:scheme:id:perm 来标识,主要涵盖 3 个方面: 权限模式(Scheme): ...
- 1.ZooKeeper ACL权限控制
参考:https://blog.csdn.net/liuxiao723846/article/details/79391650 ZK 类似文件系统,Client 可以在上面创建节点.更新节点.删除节点 ...
- <实训|第十三天>linux中ACL权限控制以及磁盘配额,附编译属于自己的linux内核
[root@localhost~]#序言 首先讲讲昨天关于缩容失败,开不机的解决方法:ACL权限也算是一个很重要的知识点,不难,但是很实用:磁盘配额一般不需要自己弄,但是要懂得原理.剩下的就是编译属于 ...
- ACL权限控制列表
1.查看文件系统是否支持ACL (xfs文件系统强制开启ACL,如果该分区已格式化为xfs,在使用dumpe2fs会看不到superblocks信息)zheng@ubuntu16:~$ sudo du ...
- ZooKeeper学习之路(五)—— ACL权限控制
一.前言 为了避免存储在Zookeeper上的数据被其他程序或者人为误修改,Zookeeper提供了ACL(Access Control Lists)进行权限控制.只有拥有对应权限的用户才可以对节点进 ...
- ZooKeeper系列(五)—— ACL 权限控制
一.前言 为了避免存储在 Zookeeper 上的数据被其他程序或者人为误修改,Zookeeper 提供了 ACL(Access Control Lists) 进行权限控制.只有拥有对应权限的用户才可 ...
- Linux下ACL权限控制以及用sudo设置用户对命令的执行权限
ACL权限分配 1.setfacl命令设置文件权限 setfacl -m u:user1:rw root.txt setfacl -m u:user2:rwx root.txt 2.getfacl命令 ...
- LInux ACL权限控制
1.ACL简介 ACL是一种可以实现灵活的权限管理(文件的额外赋权机制)除了文件所有者,所属组和其他人,可以对更多的用户设置权限,这就是访问控制列表(Access Control List) 2.AC ...
随机推荐
- Selenium IDE界面学习
- Java队列存储结构及实现
一.队列(Queue) 队列是一种特殊的线性表,它只允许在表的前段(front)进行删除操作,只允许在表的后端(rear)进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头. 对于一个队 ...
- C++学习笔记-隐式成员函数
通过一个例子来复习C++操作符重载及隐式成员函数.MyString类模仿标准string类,简单的实现了构造一个字符串.字符串比较.取单个字符等功能.如下: #ifndef MYSTRING_H_ # ...
- Delphi FastReport动态加载图片 (转载)
以前用FastReport制作报表,从来没有打印过图片,这段时间做了个打印个人简历的程序,需要打印照片.试着在frreport模板中加载照片没 问题,可是想要动态的装载照片要怎么做呢,我的要求是将个人 ...
- 微信小程序组件radio
表单组件radio:官方文档 Demo Code: Page({ data: { items: [ {name: 'USA', value: '美国'}, {name: 'CHN', value: ' ...
- JavaScript-dom3 json_str dom元素控制 模拟百度搜索
访问关系-封装代码 html <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- java的接口为什么不能实例化
java的接口为什么不能实例化呢?首先,我们需要明白实例化的含义.实例化实际意义是在jvm的堆中开辟出一块内存空间,比如Student s = new Student();此处声明Student对象s ...
- kafka的javaapi生产者生产消息,消费者获取不到
zookeeper和kafka的日志没有出现什么报错 linux下kafka的命令行能生产并收到消费消息 但是在idea(windows环境下)中,调用api,获取不到数据,也生产不了数据,现象就是没 ...
- FFmpeg 入门(3):播放音频
本文转自:FFmpeg 入门(3):播放音频 | www.samirchen.com 音频 SDL 提供了播放音频的方法.SDL_OpenAudio 函数用来让设备播放音频,它需要我们传入一个包含了所 ...
- 同时执行2条不同sql
select * from a: select *from b; 用分号结束.