我正在研究一種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