неее, слишком много редиректов плодиться будет если экшенов много становится, проблему решил таким путем -
1) описываю роли пользователей,
2) беру последнюю роль пользователя(тут будет так на 1х местах роли с меньшими правами, чем больше индекс тем больше прав у роли)
3) Загружаю экшен с названием роли.
4) в секьюрити экшен поочередно добавляю экшены и права для них
В итоге всего 2 действия - создать экшен, создать запись в массиве секур_экшен
Думаю код всё скажет сам
Код:
class Controller_Admin_Main extends Controller_Admin_Common {
public $secure_actions = array(
'index' => array('login', 'admin'),
'root' => array('login', 'admin', 'root'),
'noaccess' => array('login')
);
public function action_index()
{
$user = Auth::instance()->get_user();
$users = ORM::factory('user', $user->id);
$roles = $users->roles->find_all();
$role = $roles[count($roles)-1]->name;
$this->view->content = Request::initial()->action($role)->execute();
$this->response->body($this->view);
}
public function action_root() {}
public function action_noaccess() {}
}
ну и дальше например
1) создаем экшен для менеджера
Код:
public function action_manager() {}
2) в секур экшн делаем
Код:
'manager' => array('login', 'admin', 'manager'),
'root' => array('login', 'admin', 'manager', 'root'),
Знаю знаю, с добавлениемролей надо будет контроллировать массив секур экшен, думаю если уж совсем упрощать то в метод before создать массив секур акшен и обединять массивы, добавляя к последнему элементу, но ролей вроде не очень много будет и прыгать часто не будут, так что как сейчас устраивает
P.S. Буду рад критике кода