#cakephp #acl #authentication
#cakephp #acl #аутентификация
Вопрос:
Я начал с CakePHP и просто хочу работать со списком управления доступом (ACL)
Я нашел руководство, но я не могу работать с этим.
Я хотел бы иметь две группы с отдельными разрешениями.
Администраторы могут регистрировать новых пользователей. Пользователи могут входить в систему только и просматривать свои профили.
Я думаю, что это действительно просто, но я не могу уловить логику..
Я надеюсь, что вы сможете мне помочь, это действительно расстраивает .. 😛
Идентификатор пользователя базы данных — основное имя пользователя — уникальный пароль group_id идентификатор группы — основное имя — уникальный
Пользователь класса модели
<?php
class User extends AppModel {
var $name = 'User';
var $displayField = 'username';
var $belongsTo = array(
'Group' => array(
'className' => 'Group',
'foreignKey' => 'group_id'
)
);
}
?>
Группа классов модели
<?php
class Group extends AppModel {
var $name = 'Group';
var $displayField = 'name';
var $hasMany = array(
'User' => array(
'className' => 'User',
'foreignKey' => 'group_id',
'dependent' => false
)
);
}
?>
Класс контроллера AppController
<?php
class AppController extends Controller {
var $components = array('Auth', 'RequestHandler');
var $permissions = array();
function beforeFilter() {
$this->Auth->fields = array(
'username'=>'username', //The field the user logs in with (eg. username)
'password' =>'password' //The password field
);
$this->Auth->authorize = 'controller';
$this->Auth->autoRedirect = false;
$this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
$this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
$this->Auth->loginRedirect = array('controller' => 'users', 'action' => 'welcome');
}
function isAuthorized(){
if($this->Auth->user('group') == 'admin') return true; //Remove this line if you don't want admins to have access to everything by default
if(!empty($this->permissions[$this->action])){
if($this->permissions[$this->action] == '*') return true;
if(in_array($this->Auth->user('group'), $this->permissions[$this->action])) return true;
}
return false;
}
}
?>
Класс контроллера UsersController
<?php
class UsersController extends AppController {
var $name = 'Users';
var $helpers = array('Html', 'Form');
var $permissions = array(
'logout' => '*',
'welcome' => '*'
);
function welcome(){
}
function login(){
if($this->Auth->user()){
$this->Session->write('Auth.User.group', $this->User->Group->field('name',array('id' => $this->Auth->user('group_id'))));
$this->redirect($this->Auth->redirect());
}
}
function logout(){
$this->redirect($this->Auth->logout());
}
function registerusers(){
// Only for administrators.. how can I set this permission?
}
// Add whatever user logic methods you'd like here as well (eg. add/edit/delete users)
?>
Ответ №1:
и разрабатывать,
из краткого обзора я бы сказал, что вы что-то перепутали, например, $actsAs
отсутствует и добавлены некоторые другие элементы. Вам следует ознакомиться с официальным руководством здесь, поскольку оно обеспечивает то, о чем вы просите.
Слова поддержки: Если вы внимательно прочтете руководство, у вас все получится. Просто попробуйте это из новой среды CakePHP.
Ответ №2:
Создавали ли вы таблицы ACL ( aros
и acos
) в соответствии с инструкциями в руководстве по CakePHP?
Следуя этому руководству, вы увидите, что вам нужно для настройки правильной структуры, чтобы определить, какие действия могут выполняться какими пользователями (или группами).