我正在研究一种MVC框架,并且正在实现一个简单的ACL权限检查系统。在API级别进行ACL检查,基于每个方法
我想知道如果任何人都可以摆脱一些光,或直接向我这种实现的一些很好的例子(或批评正当理由的点杀它,无论是必要的)
因为我在构建REST API框架时,我创建了两个基本控制器,分别为WebController
和ApiController
。到/index.php
路线作出WebController_*
请求,并请求/api/index.php
路线作出ApiController_*
的扩展WebController
负责从模板建筑量与从统一调用必要ApiController
小号返回的数据。
扩展的ApiController
负责查询数据的Model
。如果直接拨打/api/index.php
,则返回JSON
。
但我离题了;为了促进ACL,我认为在ApiController
图层上实现它是有意义的,并且如果有拒绝,它将返回JSON
或备份到WebController
并根据请求类型进行相应处理。
我在想简化的事情,我可以利用__call()
和私人方法。 __call()
将验证所请求的方法的存在性,并且在调用它之前,检查针对ACL的方法的用户权限。
class ApiController{
public function __call($method, $arguments){
if(method_exists($this, $method)){
//haven't written ACL classes yet, but something like this
if(ACL::check(...)){
return call_user_func_array(array($this, $method), $arguments);
}else{
return false;
}
}else{
//throw catchable exception or something
}
}
}
好主意?馊主意?思考?也许我在这里头,我仍然在学习,这对教育而言比利润更多,但是完成将来使用的东西会很好。
**感谢William **;我试图避免硬调用ACL检查方法,无论是在ApiController方法调用之前还是在ApiController方法调用中。我一直在阅读Observer模式,也许这就是我应该采取的方向。 '__call()似乎是一个好主意,但如果还有其他方法来强制这种行为,我就会全神贯注。 – Dan 2011-02-28 23:11:19
是的观察者模式是一个不错的方式。在PHP中这是一个很好的实现:[Event dispatcher](http://components.symfony-project.org/event-dispatcher/)。 – 2011-02-28 23:15:24