制作简单的acl,

dispatcher(专门用来加载或调度或跳转到相应的url地址即XXXcontroller的调度器或控制器,能够在controller执行前对controller进行停止跳转等),控制器提供了一堆可以被调用的方法,即:action。action是控制器中用于处理请求的方法。默认情况下,全部 控制器public的方法都会映射到action并且可以通过URL访问。action负责解释请求和创建响应.

public/index.php

$di['aclResource'] = function(){return include_once '../app/config/Acl.php';};//security$di['dispatcher'] = function(){//events$eventsManager = new \Phalcon\Events\Manager();//读取acl权限的类$security = new Security();//lisent$eventsManager->attach("dispatch", $security);//调度器通过事件侦听acl$dispatch = new \Phalcon\Mvc\Dispatcher();$dispatch->setEventsManager($eventsManager);return $dispatch;}

  

app/plugins/Security类
use \Phalcon\Mvc\User\Plugin,\Phalcon\Events\Event,\Phalcon\Mvc\Dispatcher;class Security extends Plugin {public function __construct(){}public function _getAcl(){$acl = new \Phalcon\Acl\Adapter\Memory();//默认权限(禁止)$acl->setDefaultAction(\Phalcon\Acl::DENY);//$aclResource = $this->_custAcl();foreach($aclResource as $key=>$value){//创建角色,将角色添加到acl$acl->addRole($value['project_name']);foreach($value['resource'] as $ky=>$vy){foreach($vy as $k=>$v){//添加资源$acl->addResource(new \Phalcon\Acl\Resource(strtolower($ky)), $v);//添加访问权限$acl->allow($value['project_name'], strtolower($ky), $v);}}}return $acl;}public function _custAcl(){if( $this->persistent->acl == null){$aclResource = array();$acl = $this->aclResource['Acl'];$allResource = $this->aclResource['AllResource'];foreach($acl as $key=>$value){$tomer = array();$tomer['project_name'] = $value;foreach($allResource as $k=>$v){if( strpos($k, strtolower($key) ) !== false ){$tomer['resource'] = $v;}}$aclResource[$key] = $tomer;}$this->persistent->acl = $aclResource;}return $this->persistent->acl;}public function beforeExecuteRoute(Event $event, Dispatcher $dispatcher ){$controller = $dispatcher->getControllerName();$action = $dispatcher->getactionName();$role = '';if( $this->session->has('userInfo') ){$userInfo = $this->session->get('userInfo');$role = $userInfo['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');}

  

循环调度事件(Dispatch Loop Events)¶

Phalcon\Mvc\Dispatcher 可以发送事件给当前的 EventsManager 。 事件会以“dispatch”类型被所触发。当返回false时有些事件可以终止当前激活的操作。已支持的事件如下:

事件名称 何时触发 此操作是否可终止? 触发于
beforeDispatchLoop 在进入循环调度前触发。此时,调度器不知道将要执行的控制器或者动作是否存在。调度器只知道路由传递过来的信息。 侦听者
beforeDispatch 在进入循环调度后触发。此时,调度器不知道将要执行的控制器或者动作是否存在。调度器只知道路由传递过来的信息。 侦听者
beforeExecuteRoute 在执行控制器/动作方法前触发。此时,调度器已经初始化了控制器并知道动作是否存在。 侦听者/控制器
initialize 允许在请求中全局初始化控制器。 控制器
afterExecuteRoute 在执行控制器/动作方法后触发。由于此操作不可终止,所以仅在执行动作后才使用此事件进行清理工作。 侦听者/控制器
beforeNotFoundAction 当控制器中的动作找不到时触发。 侦听者
beforeException 在调度器抛出任意异常前触发。 侦听者
afterDispatch 在执行控制器/动作方法后触发。由于此操作不可终止,所以仅在执行动作后才使用此事件进行清理工作。 侦听者
afterDispatchLoop 在退出循环调度后触发。 侦听者


phalcon: eventManager事件管理(结合dispatcher调度控制器)制作简单的acl相关推荐

  1. phalcon: Profiling分析 profilter / Plugin结合,dispatcher调度控制器 监听sql执行日志

    个人觉得profilter 跟 logger 功能差不多,logger的功能在于写入,profilter功能在于sql后及时显示分析.都是对sql执行的的分析:一个是写入log文件,一个是直接在页面展 ...

  2. 控制器制作简单验证码和汉字验证码

    @Controller @RequestMapping("imageCode") public class ImageCodeController {Color getRandCo ...

  3. Angular 4.x 事件管理器及自定义EventManagerPlugin

    在 Angular 中如何为同一个表达式绑定多个事件呢?如果我们这样做可能会是这样的: <div><button (click, mouseover)="onClick() ...

  4. phalcon:model 事件与事件管理器

    事件与事件管理器(Events and Events Manager)¶ Models allow you to implement events that will be thrown when p ...

  5. Weaveworks增加发布自动化和事件管理

    Weaveworks已经发布了针对 Weave Cloud SaaS平台的新特性,其目的是简化容器和微服务的部署.监控和管理,包括:具有历史审计的事件管理.即时搜索和可定制的分析和仪表盘,发布自动化和 ...

  6. 数据可视化大屏应急管理综合指挥调度系统完整案例详解(PHP-API、Echarts、百度地图)

    文章目录 项目说明 一.项目说明 单位信息数据库字段: 资源数据库字段 项目需求 二.项目开发 1.项目分析 2.引入库 3.项目开发 (1)地图容器构建 (2)筛选和返回按钮事件 (3)企业筛选功能 ...

  7. vue日程安排_使用Fullcalendar管理时间计划调度安排

    原标题:使用Fullcalendar管理时间计划调度安排 Fullcalendar可以很好的管理日程安排事件,可以管理时间和任务调度,比如日常值班岗位安排.举办活动会议议程安排.项目行动安排.车间劳动 ...

  8. 20070926日下午工作流与ITILQQ群 事件管理 讨论聊天记录

    [E8]苏康胜(8608297) 14:38:41 各位是否有兴趣讨论下 事件管理 相关设计? [深圳]飞花逐月(43884134) 14:39:03 我洗耳恭听 路在前方(576212694) 14 ...

  9. [Unity] ACT 战斗系统学习 1:基于委托的事件管理器

    我觉得看视频太慢了,还是看别人源码更快-- 1.664235822/DarkSouls-Demo Github 源码: https://github.com/664235822/DarkSouls-D ...

最新文章

  1. Java Script 第四节课 Java Script的隐式转换
  2. 互联网协议 — 互联网的技术发展
  3. 高斯分布概念学习和C#自定义控件
  4. boost::contract模块实现sqrt的测试程序
  5. if-else运用及技巧(C# 参考)
  6. GIT关联本地仓库与远端仓库
  7. 软考信息安全工程师学习笔记三(1.3 信息安全管理基础)
  8. Sharding-Proxy分库配置_Sharding-Sphere,Sharding-JDBC分布式_分库分表工作笔记020
  9. 开发效率不高?强烈推荐这十款精选IDEA插件
  10. Win7双屏显示设置
  11. WebApi2官网学习记录---Media Formatters
  12. VC2013配置OpenCV开发环境
  13. 网站页面黑白色效果实现技巧
  14. 国际h2真假u盘测试软件,u盘速度测试软件H2TEST
  15. 计算机网络---网络编程套接字(一)
  16. 我是如何将LINE表情包转化为微信表情包的?/How I convert Line stickers into Wechat stickers just as the way they are?
  17. 计算机科学成为独立学科的奠基人,详解卡内基梅隆大学计算机学院
  18. 三菱485BD板学习和认识
  19. 2021年最受数据分析师欢迎的副业排行榜TOP1
  20. 项目管理中,管理者如何打造团队执行力?

热门文章

  1. python中torch模块下载,Python qtorch包_程序模块 - PyPI - Python中文网
  2. 把RNN植入体内,仅凭一张“薄片”,就能直接检测你有无心律异常 | Science子刊...
  3. 50万买只波士顿动力机器狗,只为训练它“尿”啤酒,还让女朋友尝尝
  4. 用脑机接口去“搜索一下”,是种什么体验? | CCF C³-03@搜狗
  5. 一起探讨NLP的边界和未来,学术界与工业界在“语言与智能高峰论坛”上擦出火花...
  6. 开源大数据周刊-第76期
  7. 崛起的中国服务器市场迎来旺盛的SPEC测试需求
  8. Oracle PL/SQL Developer集成TFS进行团队脚本文件版本管理
  9. AAuto如何发布EXE文件
  10. 如何安全设置无线路由