Yii Framework Forum: Как Правильно Использовать Controllers И Views Для Авторизованных Пользователей И Нет - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Как Правильно Использовать Controllers И Views Для Авторизованных Пользователей И Нет Rate Topic: -----

#1 User is offline   Yngwie 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 13-October 11

Posted 10 March 2013 - 02:35 PM

У меня в проекте есть система авторизации пользователей. И мне бы хотелось бы немного поменять логику для авторизованных пользователей и нет. На текущий момент я делаю такую проверку в самих контроллерах и представлениях:

public function actionIndex()
{
   if (Yii::app()->user->isGuest) {
     .
     .
     .   
   } else {
     .
     .
   }
}


<?php 
    if(Yii::app()->user->isGuest) {
        print("Welcome back Guest!");
        print("Your id is ".Yii::app()->user->id);
    } else {
        print("Welcome back ".Yii::app()->user->name);
        print("Your id is ".Yii::app()->user->id);
}?>


Мне кажется этот подход не очень правильным, поскольку здесь мешается все в кучу и если логика для авторизаванных пользователей и нет сильно разнится, что будет полная каша. Было бы здорово если бы можно было создавать базовые контроллеры и представления с общей логикой и от них унаследовать классы для авторизованных пользователей и нет. Что-то вроде этого:

class SiteController extends Controller
{
}

class AuthSiteController extends SiteController
{  
   $this->render('indexAuth');
}

class NoAuthSiteController extends SiteController
{  
  $this->render('indexNoauth');
}


Кто что думает об этом? Может в Yii есть что-то подобное?
0

#2 User is offline   ORey 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 1,688
  • Joined: 20-April 09
  • Location:Moscow, Russia

Posted 10 March 2013 - 02:48 PM

Ну вот конкретно Ваш пример с AuthSiteController легко реализуется переопределением метода render в базовом контроллере.
К примеру, перехватывать название вьюхи и добавлять префикс 'admin_' если пользователь залогинен.
Соответственно, два набора вьюх.

Если требуется подменять контроллер в зависимости от залогиненности - я бы попробовал роутер допилить.

А вообще посмотрите еще на модули и accessFilter.
God is real unless declared as integer
0

#3 User is offline   Yngwie 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 10
  • Joined: 13-October 11

Posted 10 March 2013 - 10:55 PM

View PostORey, on 10 March 2013 - 02:48 PM, said:

Ну вот конкретно Ваш пример с AuthSiteController легко реализуется переопределением метода render в базовом контроллере.
К примеру, перехватывать название вьюхи и добавлять префикс 'admin_' если пользователь залогинен.
Соответственно, два набора вьюх.

Вы это имеете в виду?:
class SiteController extends Controller
{
  $auth = Yii::app()->user->isGuest ? "Noauth" : "Auth";
  $this->render("index$auth");
}

Если так, то тоже вариант, поскольку так нужно делать в каждом роутере каждого контроллера.

View PostORey, on 10 March 2013 - 02:48 PM, said:

Если требуется подменять контроллер в зависимости от залогиненности - я бы попробовал роутер допилить.

Подскажите в каком месте пилить?

View PostORey, on 10 March 2013 - 02:48 PM, said:

А вообще посмотрите еще на модули и accessFilter.

Не очень понял как в данном случае можно использовать модули?
0

#4 User is offline   ORey 

  • Elite Member
  • PipPipPipPipPip
  • Yii
  • Group: Members
  • Posts: 1,688
  • Joined: 20-April 09
  • Location:Moscow, Russia

Posted 12 March 2013 - 03:44 AM

View PostYngwie, on 10 March 2013 - 10:55 PM, said:

Вы это имеете в виду?:
class SiteController extends Controller
{
  $auth = Yii::app()->user->isGuest ? "Noauth" : "Auth";
  $this->render("index$auth");
}

Если так, то тоже вариант, поскольку так нужно делать в каждом роутере каждого контроллера.


Не, я имел в виду переопределить в Controller вот эту штуку. Туда передается название вьюхи, которую надо рендерить, и можно ее подменять в зависимости от потребностей, а потом отдавать базовому контроллеру для фактического рендеринга.


View PostYngwie, on 10 March 2013 - 10:55 PM, said:

Подскажите в каком месте пилить?


Ну, роутер сделан как компонент, соответственно от него можно отнаследоваться или полностью подменить своим (в конфиге, по той же схеме, по которой CWebUser переопределяем).

View PostYngwie, on 10 March 2013 - 10:55 PM, said:

Не очень понял как в данном случае можно использовать модули?


Ну, это на случай, если потребуется полностью изменить пользовательскую часть.
God is real unless declared as integer
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users