Русскоязычный форум, посвященный фреймворку Kohana
http://forum.kohanaframework.su/

И снова роуты
http://forum.kohanaframework.su/viewtopic.php?f=31&t=429
Страница 1 из 1

Автор:  nixon [ 31 окт 2012, 16:55 ]
Заголовок сообщения:  И снова роуты

Никак не могу понять - есть роут
Код:
Route::set('admin', 'admin(/<controller>(/<action>(/<id>)))')
   ->defaults(array(
      'directory' => 'admin',
      'controller' => 'page',
      'action' => 'index',
   ));


Задача - надо чтобы адреса вида admin/ - по умолчанию исполняли экшены из контроллера page, но если вдруг появится адрес с указанием контроллера, то из соответствующего контроллера

Автор:  nixon [ 31 окт 2012, 17:01 ]
Заголовок сообщения:  Re: И снова роуты

вообще собственно зачем так надо?
Хочу чтобы при входе в админку адрес был admin
но(!) если допустим заходит юзер и у него роли админ и логин то ему подсовываем один экшн, а если заходит юзер с ролями админ, логин, рут, то ему подсовываем другой экшн с другим интерфейсом. Зачем так? Чтобы админка была единой по адресу /admin и спокойно можно было переадресовывать на этот адрес после авторизации, а не каждый раз редиректить на нужный роут.
Можно просто выделить по контроллеру на каждую группу пользователей, но опять же каждый раз дописывать редирект, если какая группа добавится, а так роут один, контроллер админки один, а экшены для пользователей разные
Разграничение на роли уже есть, а вот с роутами для этого дела беда

Автор:  Zorato [ 31 окт 2012, 23:40 ]
Заголовок сообщения:  Re: И снова роуты

Как-то очень сумбурно у вас проблема описана.
Сходу могу предложить такой вариант: в методе before определять права пользователя и отправлять(редиректить) на нужный экшн.

Автор:  nixon [ 01 ноя 2012, 12:43 ]
Заголовок сообщения:  Re: И снова роуты

неее, слишком много редиректов плодиться будет если экшенов много становится, проблему решил таким путем -
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. Буду рад критике кода

Страница 1 из 1 Часовой пояс: UTC + 4 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/