路由与权限?

1.我们在何处可以完全得到路由信息?是在onBeginRequest生命周期中,还是在controller被实例化后才可以呢?

一旦我们的系统目录结构层次确定后,我们是不是可以根据$_GET[‘r’]来准确的得到路由信息呢(我想完全是可以的吧,因为我们的目录结构完全确定,我们就很清晰知道$_GET[‘r’]存储的是’module.controller/action’还是’controller/action’)?

2.我们做的系统如果是要分模块的时候,路由肯定就是module/controller/action之类的了。此时我们应该是可以把权限放到module层吧?那么我们的权限系统这时肯定存在4个级别(module,controoler,action, action之下根据某种商业逻辑的操作)其实绝大多数时,文档中所说的task,operation都会和他们有个对应关系。这个时候使用addChild()能够建立起上述的4层权限吗?

3.这个addChild()方法完成太多工作了,绑定角色的权限是用它,task和opeartion这之间的继承也用它,个人感觉这样不是很清晰。

4.processRequest这个事件貌似不能像onbeginRequest事件正常使用,我在配置文件写这个事件的回调时,会显示不存在processRequest这样的属性(未定义);

(问题比较多,很是麻烦了,谢谢)也希望其他的各位同仁来帮忙解决这些困惑(靠qing等仅有的一些人的回复,怕是他们会疯掉吧,呵呵 :rolleyes: ),有不理解问题描述的,也可以回复,以便我能更清楚的描述问题,那样你们也就可以很顺利的帮我解决问题了。鄙人废话多了点)

你问的问题都很好。:D

  1. 路由解析比这个要复杂,因为module或application的controllerMap和modules属性可以声明额外的controller和module。这就需要动态加载module或application后才能正确解析路由了。如果你是希望在一个公共的地方放置对所有action都公用的代码的话,你可以考虑重写controller基类的beforeAction和afterAction。

  2. 应该是可以的。需要注意的是operation可以嵌套operation,task可以嵌套task和operation,role可以嵌套所有的。也就是说任意层次的权限都是可以的。

  3. addChild只是用来建立operation/task/role之间的层次关系。在本质上,这三者都是一回事。

  4. processRequest不是一个事件。事件必须是on开头的。

这些问题都是比较真正实用的,贴近于使用的,很多框架都没有考虑这些进来。

像 Zend Framework 就有这些了吧。

包含于 module 和 acl 来解决权限问题和路由。

什么时候能出一个 RBAC 的例子,我最近的项目是用Yii做的,权限这块是自己做的,没有用RBAC