【发布时间】:2011-02-28 22:42:08
【问题描述】:
我正在开发一种 MVC 框架,并且我正在实现一个简单的 ACL 权限检查系统。
我想知道是否有人可以解释一下,或者指导我寻找一些这种实现的好例子(或者批评到保证废弃它的地步,无论是必要的)
由于我在构建框架时考虑到了 REST API,因此我创建了两个基本控制器,WebController 和 ApiController。
对/index.php 的请求路由到WebController_*,对/api/index.php 的请求路由到ApiController_*
扩展的WebController 负责构建模板的输出,其中包含从对必要ApiControllers 的合并调用返回的数据。
扩展的ApiController 负责查询Model 的数据。如果直接调用/api/index.php,则返回JSON。
但我跑题了;为了方便 ACL,我认为在 ApiController 层实现它是有意义的,如果有拒绝,它会在 JSON 中返回或备份到WebController 并根据请求类型进行相应处理。
我正在考虑简化事情,我可以使用__call() 和private 方法。 __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
}
}
}
好主意?馊主意?有什么想法吗? 也许我在我的头脑中,我还在学习,这更多的是为了教育而不是为了利润,但是完成一些有未来用途的东西会很好。
【问题讨论】:
标签: php model-view-controller acl