Я работаю над своего рода MVC-фреймворком и внедряю простую систему проверки прав доступа 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
}
}
}
Хорошая идея?Плохая идея?Мысли? Может быть, я здесь над головой, я все еще учусь, и это больше для образования, чем для прибыли, однако было бы неплохо закончить что-то, что будет использоваться в будущем.