2014-02-21 5 views
0

я не знаю, как использовать AuthComponent, то это путь я аутентификация пользователя с несколькими ролями выглядят следующим образом:Является ли мой сеанс сеанса CakePHP безопасным?

Существует 3 ролей: Администраторы, Перепродажа и клиенты .. один контроллер для каждого из них, для отдельные виды, и это мой beforeFilter для каждой роли/контроллера:

AdministratorsController:

function beforeFilter(){ 
    if (!$this->isAuth('Administrator')) 
     $this->redirect('/'); 
} 

AppController:

function isAuth($strRole = NULL){ 
    $data = $this->Session->read('User'); 

    if (!$this->Session->check('User') || (!is_null($strRole) && $data['Role']['nome'] != $strRole)) 
     return false; 

    return true; 
} 

В UsersController Я делаю только проверку подлинности, если существует $this->Session->read('User'), если пользователь существует, он получает всю информацию и помещает в сеанс следующим образом: $this->Session->write('User', $user);, предполагая, что $user - это находка из Модели со всей информацией о пользователе.

вопрос, есть ли у меня проблемы? это правильно"? не знаю, был ли я ясен, если не хватает информации, спросите.

+0

какие проблемы? –

+0

Возможно, безопасность .. сложно поддерживать код (никогда не было проблемой до сих пор, но я бы предпочел предотвратить) –

+0

приведенный выше код не остановит ваш дом от сжигания. кроме того, что я не знаю, что вы хотите ответить –

ответ

1

Вы реплицируете логику, которую уже реализует для вас рамка.

См http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html#authorization-who-s-allowed-to-access-what

Взятые с этой страницы (вы все равно должны читать ..):

public function isAuthorized($user) { 
    // Admin can access every action 
    if (isset($user['role']) && $user['role'] === 'admin') { 
     return true; 
    } 

    // Default deny 
    return false; 
} 

Данные пользователя получает переданные ему, нет необходимости для извлечения пользовательских данных самостоятельно.

И если вы когда-либо для извлечения пользовательских данных с помощью $ this-> Auth-> пользователя():

// Some field 
$this->Auth->user('someField'); 
// Whole data 
$this->Auth->user(); 

Если ключ сеанса либо изменяет по какой-то причине все, что вам прямые призывы к session- > read («Пользователь») будет в беде. Хорошим и не столь маловероятным примером здесь является то, что приложение должно быть расширено с помощью 2-го адаптера аутентификации, который составляет , а не с использованием сеанса. Auth будет знать о данных, Session не будет иметь его.

+0

Да, я делаю почти то же самое. Я буду использовать Auth, спасибо –

Смежные вопросы