Hellow

Hello World

вторник, 29 октября 2013 г.

Распределение прав доступа

Права доступа — совокупность правил, регламентирующих порядок и условия доступа субъекта к объектам информационной системы (информации, её носителям, процессам и другим ресурсам) установленных правовыми документами или собственником, владельцем информации.
Права доступа определяют набор действий (например, чтение, запись, выполнение), разрешённых для выполнения субъектам (например, пользователям системы) над объектами данных. Для этого требуется некая система для предоставления субъектам различных прав доступа к объектам. Это система разграничения доступа субъектов к объектам, которая рассматривается в качестве главного средства защиты от несанкционированного доступа к информации.

Для распределение прав cоздаем base Контроллер который будет  наследовать CI_Controller.  Так же он должен наследоваться всеми контроллерами проекта. В этом контроллере создаем приватную переменную которая содержит массив прав доступа. Пример:


 private $access = array(
            'user'  => array(
                'ad',
                'profile',
                'user',
                'auth',
                'transaction'
            ),
            'guest' => array(
                'ad' => array('index', 'show'),
                'home',
                'auth',
                'transaction',
                'user' => array('recoverPassword', 'changePassword')
            )
        );
В примере user, quest - имена ролей. Каждая роль имеет свой массив в котором указываются название классов, к которым эта роль имеет доступ. Так же класс может иметь массив с методами, к которым данная роль имеет доступ.
Для проверки доступа в нашем контроллере созадем функцию access(), которая буде вызываться в конструкторе. Пример:

function access() {        
        $role = $CI->session->userdata('user') ? 'user' : 'guest';
   
        if(! in_array($CI->uri->rsegment(1), $this->access[$role])
           && (! isset($this->access[$role][$CI->uri->rsegment(1)]) 
           || (! in_array($CI->uri->rsegment(2), $this->access[$role][$CI->uri->rsegment(1)])) 
           )) {
                die("ERROR: No access for {$role}");
        }
    }

1 комментарий:

  1. Мистер Бенджамин сделал все возможное, чтобы помочь мне с моим кредитом, который я использовал, чтобы расширить мой аптечный бизнес. Они были дружелюбны, профессиональны и абсолютно самоотверженны. Я рекомендую всем, кто ищет кредит, связаться с нами. lfdsloans@outlook.com.WhatsApp ... + 19893943740.

    ОтветитьУдалить