示例#1
0
 public function preDispatch(Zend_Controller_Request_Abstract $request)
 {
     // получаем имя текущего ресурса
     $resource = $request->getControllerName();
     // получаем имя action
     $action = $request->getActionName();
     $auth = Zend_Auth::getInstance();
     $username = Zend_Auth::getInstance()->getIdentity()->username;
     // Создаём объект Zend_Acl
     $acl = new Zend_Acl();
     // Добавляем ресурсы сайта
     $acl->addResource('index')->addResource('access')->addResource('catalog')->addResource('history')->addResource('outlets')->addResource('warehouse')->addResource('repairs')->addResource('sales')->addResource('service')->addResource('statistic')->addResource('documentation')->addResource('reports')->addResource('setup')->addResource('error');
     // далее переходим к созданию ролей, которых у нас 3:
     $acl->addRole('guest');
     // гость (неавторизированный пользователь)
     $acl->addRole('client');
     // гость (авторизированный пользователь)
     $acl->addRole('admin');
     // гость (авторизированный пользователь)
     // разрешаем гостю просматривать ресурс index
     $acl->allow('guest', 'access', array('login'))->allow('guest', 'error');
     $allow = new Application_Model_DbTable_Allow();
     $allow_data = $allow->fetchAll($allow->select()->where("username = '******'"))->toArray();
     $allow_array = array('documentation' => array($allow_data[0]['doc_index'], $allow_data[0]['doc_file'], $allow_data[0]['doc_delete']), 'catalog' => array($allow_data[0]['cat_index'], $allow_data[0]['cat_add'], $allow_data[0]['cat_edit'], $allow_data[0]['cat_delete'], $allow_data[0]['cat_exl']), 'history' => array($allow_data[0]['his_index']), 'reports' => array($allow_data[0]['rep_index']), 'statistic' => array($allow_data[0]['stat_index']), 'sales' => array($allow_data[0]['sal_index'], $allow_data[0]['sal_add'], $allow_data[0]['sal_edit'], $allow_data[0]['sal_delete'], $allow_data[0]['sal_toexcel']), 'repairs' => array($allow_data[0]['rps_index'], $allow_data[0]['rps_add'], $allow_data[0]['rps_edit'], $allow_data[0]['rps_delete'], $allow_data[0]['rps_toexcel'], $allow_data[0]['rps_toexcelmounth'], $allow_data[0]['rps_statistic']), 'warehouse' => array($allow_data[0]['war_index'], $allow_data[0]['war_add'], $allow_data[0]['war_edit'], $allow_data[0]['war_delete'], $allow_data[0]['war_toexcel'], $allow_data[0]['war_history'], $allow_data[0]['war_load'], $allow_data[0]['war_unload']), 'service' => array($allow_data[0]['ser_index'], $allow_data[0]['ser_add'], $allow_data[0]['ser_edit'], $allow_data[0]['ser_delete'], $allow_data[0]['ser_toexcel'], $allow_data[0]['ser_invoice']), 'setup' => array($allow_data[0]['set_index'], $allow_data[0]['set_names'], $allow_data[0]['set_addname'], $allow_data[0]['set_editname'], $allow_data[0]['set_deletename'], $allow_data[0]['set_types'], $allow_data[0]['set_addtype'], $allow_data[0]['set_edittype'], $allow_data[0]['set_deletetype'], $allow_data[0]['set_owners'], $allow_data[0]['set_addowner'], $allow_data[0]['set_editowner'], $allow_data[0]['set_deleteowner'], $allow_data[0]['set_users'], $allow_data[0]['set_adduser'], $allow_data[0]['set_edituser'], $allow_data[0]['set_deleteuser'], $allow_data[0]['set_status'], $allow_data[0]['set_addstatus'], $allow_data[0]['set_editstatus'], $allow_data[0]['set_deletestatus'], $allow_data[0]['set_prices'], $allow_data[0]['set_addprices'], $allow_data[0]['set_editprices'], $allow_data[0]['set_deleteprices'], $allow_data[0]['set_access'], $allow_data[0]['set_addaccess'], $allow_data[0]['set_editaccess'], $allow_data[0]['set_deleteaccess']));
     $acl->allow('client', 'error')->allow('client', 'access', array('logout'))->allow('client', 'index', array('index'))->allow('client', 'history', $allow_array['history'])->allow('client', 'documentation', $allow_array['documentation'])->allow('client', 'reports', $allow_array['reports'])->allow('client', 'statistic', $allow_array['statistic'])->allow('client', 'catalog', $allow_array['catalog'])->allow('client', 'sales', $allow_array['sales'])->allow('client', 'repairs', $allow_array['repairs'])->allow('client', 'warehouse', $allow_array['warehouse'])->allow('client', 'service', $allow_array['service'])->allow('client', 'setup', $allow_array['setup']);
     $acl->allow('admin', 'error')->allow('admin', 'access', array('logout'))->allow('admin', 'index', array('index'))->allow('admin', 'history', array('index'))->allow('admin', 'outlets', array('index', 'autofind', 'save'))->allow('admin', 'documentation', array('index', 'file', 'delete'))->allow('admin', 'reports', array('index'))->allow('admin', 'statistic', array('index'))->allow('admin', 'catalog', array('index', 'toexcel', 'add', 'edit', 'delete'))->allow('admin', 'sales', array('index', 'toexcel', 'add', 'edit', 'delete'))->allow('admin', 'service', array('index', 'toexcel', 'invoice', 'add', 'edit', 'delete'))->allow('admin', 'repairs', array('index', 'statistic', 'toexcel', 'toexcelmonth', 'add', 'edit', 'delete'))->allow('admin', 'warehouse', array('index', 'add', 'edit', 'delete', 'unload', 'load', 'history', 'toexcel'))->allow('admin', 'setup', array('index', 'names', 'addname', 'editname', 'deletename', 'types', 'addtype', 'edittype', 'deletetype', 'owners', 'addowner', 'editowner', 'deleteowner', 'users', 'adduser', 'edituser', 'deleteuser', 'status', 'addstatus', 'editstatus', 'deletestatus', 'access', 'addaccess', 'editaccess', 'deleteaccess', 'prices', 'addprices', 'editprices', 'deleteprices'));
     // получаем доступ к хранилищу данных Zend,
     // и достаём роль пользователя
     $identity = $auth->getStorage()->read();
     //var_dump($auth->getStorage()->read());
     //die;
     // если в хранилище ничего нет, то значит мы имеем дело с гостем
     if (empty($identity->role)) {
         $identity = new stdClass();
         // for php 5.4
         $identity->role = 'guest';
     }
     // если пользователь не допущен до данного ресурса или не зарегистрирован
     // то отсылаем его на страницу авторизации
     if (Zend_Auth::getInstance()->hasIdentity()) {
         if (!$acl->isAllowed($identity->role, $resource, $action)) {
             $request->setControllerName('error')->setActionName('noaccess');
         }
     } else {
         $request->setControllerName('access')->setActionName('login');
     }
 }
示例#2
0
 public function editaccessAction()
 {
     $id = $this->getParam('id');
     $access = new Application_Model_DbTable_Access();
     $allow = new Application_Model_DbTable_Allow();
     // Если к нам идёт Post запрос
     if ($this->getRequest()->isPost()) {
         // Принимаем его
         $formData = $this->getRequest()->getPost();
         //принимаем данные
         if (!preg_match("/^[a-z0-9]{5,15}\$/i", $formData['username'])) {
             //проверка регулярных выражений
             $error['username'] = '******';
             //записываем несовпадение правилам
         }
         if (!preg_match("/^[a-z0-9]{5,15}\$/i", $formData['password'])) {
             //проверка регулярных выражений
             $error['password'] = '******';
             //записываем несовпадение правилам
         }
         if (!preg_match("/^[a-z]{5,6}\$/i", $formData['role'])) {
             //проверка регулярных выражений
             $error['role'] = 'error';
             //записываем несовпадение правилам
         }
         //создаем массив данных из пунктов где нажаты галочки
         foreach ($formData as $data => $value) {
             if (preg_match("/check/", $data)) {
                 //ищем переменные check
                 if (!$error) {
                     $check_data[substr($data, 6)] = $value;
                     if ($data == 'check_set_names' && $value == 'names') {
                         $check_data['set_addname'] = 'addname';
                         $check_data['set_editname'] = 'editname';
                         $check_data['set_deletename'] = 'deletename';
                     }
                     if ($data == 'check_set_types' && $value == 'types') {
                         $check_data['set_addtype'] = 'addtype';
                         $check_data['set_edittype'] = 'edittype';
                         $check_data['set_deletetype'] = 'deletetype';
                     }
                     if ($data == 'check_set_owners' && $value == 'owners') {
                         $check_data['set_addowner'] = 'addowner';
                         $check_data['set_editowner'] = 'editowner';
                         $check_data['set_deleteowner'] = 'deleteowner';
                     }
                     if ($data == 'check_set_users' && $value == 'users') {
                         $check_data['set_adduser'] = '******';
                         $check_data['set_edituser'] = '******';
                         $check_data['set_deleteuser'] = '******';
                     }
                     if ($data == 'check_set_status' && $value == 'status') {
                         $check_data['set_addstatus'] = 'addstatus';
                         $check_data['set_editstatus'] = 'editstatus';
                         $check_data['set_deletestatus'] = 'deletestatus';
                     }
                     if ($data == 'check_set_prices' && $value == 'prices') {
                         $check_data['set_addprices'] = 'addprices';
                         $check_data['set_editprices'] = 'editprices';
                         $check_data['set_deleteprices'] = 'deleteprices';
                     }
                     if ($data == 'check_set_access' && $value == 'access') {
                         $check_data['set_addaccess'] = 'addaccess';
                         $check_data['set_editaccess'] = 'editaccess';
                         $check_data['set_deleteaccess'] = 'deleteaccess';
                     }
                 } else {
                     $check_data[$data] = 'checked';
                 }
             }
         }
         //если нет ошибкок
         if (!$error) {
             //Изменяем данные в базе
             $access->editAccess($id, $formData['username'], md5($formData['password']), $formData['role']);
             $allow->editAllow($check_data, $formData['username']);
             //Переходим на предыдущую страницу
             $this->_helper->redirector('access', 'setup');
             //если есть ошибки
         } else {
             $this->view->error = $error;
             $this->view->username = $formData['username'];
             $this->view->check_data = $check_data;
         }
     } else {
         $userdata = $access->getAccess($id);
         $check_data = $allow->fetchRow($allow->select()->where('username = ?', $userdata['username']))->toArray();
         foreach ($check_data as $data => $value) {
             if ($value) {
                 $check_data["check_" . $data] = 'checked';
             }
         }
         $this->view->username = $userdata['username'];
         $this->view->role = $userdata['role'];
         $this->view->check_data = $check_data;
     }
 }