2013-04-25 2 views
0

В моих контроллерах я ограничиваю доступ, предварительно назначая свои функции admin_, а затем позволяя функции AppController isAuthorized() проверить, является ли пользователь администратором. Есть ли способ сделать это со страницами (из PageController)? Мы создали главную страницу администратора (например, панель управления), которую пользователи не могут просматривать, если они не вошли в систему, но пользователи, не являющиеся администраторами, могут ее просмотреть. Я не могу понять, как это предотвратить.CakePHP: Можете ли вы использовать префикс администратора со страницами?

+0

Этот учебник http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html#authorization-who-s-allowed-to-access- что показывает вам как выполнить основы этого. Весь учебник полезен, но связанный с ним раздел относится к тому, что вы хотите сделать. – kais

+0

Спасибо, но я читал эту главу в течение нескольких дней, и она вообще не говорит о PagesController. Мои другие контроллеры работают нормально, но мне не помогли авторизовать пользователей на * странице * – emersonthis

+0

Если вы используете действие DisplayController, это позволит любому пользователю просмотреть его. Попробуйте создать отдельное действие с префиксом admin_ и использовать его для управления информационной панелью. http://book.cakephp.org/2.0/en/controllers/pages-controller.html – kais

ответ

1

Что вы подразумеваете под страницами? Что-то статическое, которое подается PagesController или файл .htm (l), расположенный на вашем веб-сайте?

Если ваш случай - это первое, вы можете реализовать эту логику для контроллера страниц. Если это второй - запрос не проходит через CakePHP (или любой другой серверный скрипт) вообще, так что вы не можете контролировать доступ к нему через Cake.

Если ваша ситуация - это что-то другое, уточните свой вопрос, и я буду рад помочь.

Как говорится в комментарии, вы находитесь в ситуации No: 1. В классе декларации PagesController он говорит:

class PagesController extends AppController { 

это означает, что вы можете использовать любую логику, которая в AppController в зависимости от того класса, который расширяет AppController. Таким образом, вы можете использовать isAuthorized() в PagesController.

Все, что вам нужно сделать, это создать метод с именем, аналогичным вашему «представлению панели администратора», и разрешить доступ к нему только для администраторов. Или просто проверьте роль пользователя.

+0

Это первый. Я хочу, чтобы роль администратора просматривалась на определенной странице, обслуживаемой сервером PagesController – emersonthis

1

Предполагая, что первый параметр запрошенная страница, и вы можете поймать его, используя эту инструкцию:

$this->request->pass[0]; 

вы можете использовать isAuthorized функцию, чтобы решить вашу проблему делать что-то вроде этого ...

public function isAuthorized() 
{ 
    $page = strtolower($this->request->pass[0]); 

    if ($page = 'admin_page') 
    { 
     if ($this->Auth->user('Role.role_field') == 'Admin') 
     { 
      return TRUE; 
     } 
     else 
     { 
      return FALSE; 
     } 
    } 
    else 
    { 
     // This will authorize users for the other pages 
     return TRUE; 
    } 
} 

Надеюсь, это поможет. Всегда проверяйте CookBook: иногда вам нужно проверить старые книги, чтобы найти то, что вам действительно нужно. Счастливое кодирование!

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