Cake PHP Auth Ошибка отсутствует таблица базы данных. - PullRequest
0 голосов
/ 21 февраля 2012

Я пытался работать с Cake PHP Auth Section в уроках тортов с моим проектом. Но это не работает.

Я создал три таблицы «admin_users» с полями (id, имя пользователя, пароль, group_id, создан, изменен), «admin_groups» (id, имя, создан, изменен) и «users» (идентификатор, имя пользователя, пароль, создание, изменение);

Я пробовал, чтобы обычные пользователи помещались в таблицу пользователей, а пользователи с правами администратора находились в таблице 'admin_users' и группировали пользователей с правами администратора по группам admin_groups для разрешения доступа на стороне администратора.

Когда я пытаюсь, чтобы путь '[rootpath] / users / login' выдавал ошибку, таблица базы данных 'admins' для модели Admin не найдена. Но я не создал модель для администратора.

После того, как я вручную создал таблицу администраторов, снова возникла ошибка «Таблица базы данных« users_admin »для модели UsersAdmin не найдена». Здесь также не создали модель для UsersAdmin.

In Users Controller

class UsersController extends AppController {

    var $name = 'Users';
    var $uses = array();
    var $components = array('Auth','Session');


    function login() {
         $this->set('title_for_layout', 'Login');
         /*if ($this->Auth->user()) {
             $this->redirect($this->Auth->redirect());
         }*/
     }

     function logout() {
         $this->redirect($this->Auth->logout());
     }
}

Ответы [ 2 ]

1 голос
/ 21 февраля 2012

Возможно, проблема связана со структурой вашей базы данных.

Сначала немного о теме, но если вы начинаете свой проект с нуля, вам, вероятно, следует использовать только одну таблицу (users) для хранения всех пользователей.и свяжите их с другой таблицей (groups), чтобы дать им другие права.Это может быть прямая связь с полем group_id в таблице users (которая позволит вам позже использовать основной компонент ACL) или связь «многие ко многим» с таблицей users_groups между users и groups.

Тем не менее, есть что-то, что Cake не может понять из коробки: вы назвали внешний ключ между admin_users и admin_groups "group_id".С этим именем Cake попытается найти таблицу с именем groups, а не admin_groups.Если вы хотите сохранить admin_groups, имя внешнего ключа должно быть admin_group_id.

Сначала исправьте это, и, возможно, это решит некоторые проблемы, которые вы получите.Возможно, вам также придется исправить модель AdminUser, чтобы отразить это обновление, и очистить кэш, если вы не находитесь в режиме отладки.

0 голосов
/ 21 февраля 2012

Попробуйте вот так

var $name = 'Users';
var $layout = 'main';

function beforeFilter(){

   $this->Auth->authenticate = ClassRegistry::init('User');
    parent::beforeFilter(); 
}

function index(){

    $this->set('title_for_layout', 'test site');
}


function login(){   

    Security::setHash('md5');       
    $this->set('title_for_layout', 'test site');

}


function welcome(){

}


function logout(){

    $this->set('title_for_layout', 'test site');

    $this->redirect($this->Auth->logout());
}

 }
 ?>
...