CakePHP перенаправить на вход в зависимости от имени пользователя - PullRequest
2 голосов
/ 18 июля 2011

У меня есть приложение CakePHP 1.3 с системой входа в систему, которая работает хорошо. Он использует БД с таблицей пользователей, которая существовала до создания этого приложения.

Я использую Auth в моем AppController . Функция входа выглядит как

function login() {}

и он находится в users_controller .

Все работает нормально, как я уже сказал, но у меня возникают проблемы при попытке добавить новую функциональность. Я хотел бы во время процесса login определить, ввел ли пользователь определенную комбинацию логин / пароль (скажем, admin / adminpwd ). Если это так, логин должен быть успешным И он будет перенаправлен в админку (/ admin / index). В противном случае процесс входа в систему должен работать как обычно.

Оказавшись в этой административной области (контролируемой admin_controller ), этот пользователь должен иметь возможность выполнять некоторые действия исключительно для него , но не для остальных пользователей (даже если они введите в браузере /admin/action).

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

Ответы [ 2 ]

2 голосов
/ 18 июля 2011

Да, ACL довольно сложный (и мощный). Но в вашем случае я бы предложил создать поле «группа» в таблице пользователей, чтобы различать роль пользователя. Так что вы можете иметь больше администраторов позже, если хотите. Это более гибкий, чем жесткий код определенных учетных данных в вашем users_controller.

Есть несколько вещей, которые вам нужно сделать:

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

  • Проверьте, имеет ли пользователь в группе доступ к действию какой-либо другой группы: если вы этого не сделаете, обычному пользователю просто необходимо войти в систему, и он может ввести адрес администратора (если он знает об этом) и они могут делать все, что может администратор. Эта проверка, вероятно, будет выполнена в before_something_() в app_controller или где-нибудь в Auth.

Я не помню всех деталей, но вы можете получить все, что вам нужно, в Cake Cookbook. Удачи!

1 голос
/ 18 июля 2011

Давайте просто посмотрим код ...

class UsersController extends AppController {

    // we're moving the variable to AppController!

    public function login() {

        $usrInfo = $this->Auth->user();

        if (isset($usrInfo) {

            // this index name might not be right.  I'm going off memory please check this!
            if (in_array($usrInfo['username'], $this->adminUsers)) {
                // do your code here for admin users.  
                // could be a redirect or just changing the layout used
            } else {
                // is a user that is logged in but not in our admin list
            }

    }

}

Чтобы проверить, вошел ли пользователь в систему, вам нужно сделать что-то вроде следующего:

class AppController extends Controller {

    protected $adminUsers = array('joe_blow_uname', 'jane_blow_uname');

    public function beforeFilter() {

        $routing = Configure::read('Routing.admin');
        $usrInfo = $this->Auth->user();

        if (isset($this->params[$routing]) && isset($usrInfo)) {
            if (!in_array($usrInfo['username'], $this->adminUsers)) {
                // do code here for non-admin users using /admin prefix
            }
        }

    }

}

Дайте мне знать, если это не поможет.

Или что-то еще ломается ...

Edit:

Это действительно не лучший способ сделать это, очевидно. ACL или создание какой-либо группы в вашей базе данных, вероятно, будет лучше. НО, это относительно быстрый способ, который для небольшого сайта должен работать нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...