Home PageКаталог Изменения НовыеКомментарии Пользователи Регистрация
CakePHP: Code/Misc/noacl ...

Разделение доступа без ACL

В данный момент я пишу систему на связке CakePHP и MS SQL. Сначала попробовал использовать стандартный компонент ACL, но выяснилось, что CakePHP не полностью поддерживает MS SQL (по крайней мере в этом компоненте). Поэтому пришлось придумать следующий метод разделения доступа.
Предполагается, что у нас существует модель User, описывающая пользователя, и в ней присутствует поле is_admin, определяющая его принадлежность к группе администраторов. Таким образом существуют три группы: гости, пользователи и администраторы.
Для реализации подхода, нужно добавить код в app_controller.php

<?php
class AppController extends Controller 
{
    function 
beforeFilter()
    {
        
$allowedToUsers = isset($this->allowedToUsers) ? $this->allowedToUsers : array();
        
$allowedToGuests = isset($this->allowedToGuests) ? $this->allowedToGuests : array();

        
$group $this->userGroup();

        switch (
$group)
        {
            case 
'user':
                if(!
in_array($this->action$allowedToUsers))
                {
                    
$this->redirect('/pages/norights');
                }
                break;
            
            case 
'guest':
                if(!
in_array($this->action$allowedToGuests))
                {
                    
$this->redirect('/users/login');
                }
                break;
        }    
    }
    
    function 
userGroup()
    {
        
$user $this->Session->read('User');
        
$ret '';
        
        if(empty(
$user['name']))
        {
            
$ret 'guest';
        }
        else if(
intval($user['is_admin']) == 1)
        {
            
$ret 'admin';
        }
        else
        {
            
$ret 'user';
        }
        
        
$this->set('userGroup'$ret);
        
        return 
$ret;
    }

}
?>


Осталось установить ограничения в контроллерах приложения. Для этого нужно добавить массивы $allowedToUsers и $allowedToGuests, содержащие в себе список действий контроллера, к которым разрешен доступ соответствующим группам (предполагается, что администраторам разрешено все).

class StudentsController extends AppController {

    var $name = 'Students';
    var $helpers = array('Html', 'Form', 'Time');

    var $allowedToUsers = array('index', 'view', 'add', 'edit', 'delete');
    var $allowedToGuests = array();


Готово.


 
Комментарии

Спасибо, уделю этому способу внимание, стандартный ACL мне кажется громоздким.

77.94.34.155.satgate.net (2008-03-23 15:53:41)

рулез!
кстати, php пользует для mssql устаревший dblib. Рекомендую odbtp-расширение.

zz217-113-112-30.tlt.ru (2008-09-10 13:03:25)
Добавить комментарий:

Файлов нет. [Показать файлы/форму]