/**
  * Cascade delete Role
  * @group admin
  * @group admin-role-cascade-delete
  */
 public function testRoleCascadeDelete()
 {
     print "\n" . __METHOD__ . ' ';
     $role_id = 6;
     $this->_rootLogin();
     $this->request->setPost(array('role_id' => $role_id));
     $this->request->setMethod('POST');
     $this->dispatch('admin/role-delete');
     $this->logBody($this->response->outputBody());
     // debug log
     $this->assertController('admin');
     $this->assertAction('role-index');
     $this->assertNotQueryContentRegex('table', self::ZF_pattern);
     // Zend Framework
     // check role
     Zend_Loader::loadClass('Wbroles');
     $table = new Wbroles();
     $row = $table->fetchRow("id = {$role_id}");
     if ($row != null) {
         $this->assertTrue(FALSE, "\nRole delete fail!\n");
     }
     unset($table);
     // check ACLs tables
     $arr_table = array('WbCommandACL', 'Wbresources', 'WbStorageACL', 'WbPoolACL', 'WbClientACL', 'WbFilesetACL', 'WbJobACL', 'WbWhereACL');
     foreach ($arr_table as $tbl) {
         Zend_Loader::loadClass($tbl);
         $table = new $tbl();
         $row = $table->fetchRow("role_id = {$role_id}");
         if ($row != null) {
             $this->assertTrue(FALSE, "\nRole cascade delete fail!\n");
         }
         echo "0";
         unset($table);
     }
 }
Ejemplo n.º 2
0
 public function init()
 {
     Zend_Loader::loadClass('Zend_Validate_Regex');
     $this->translate = Zend_Registry::get('translate');
     //Zend_Form::setDefaultTranslator( Zend_Registry::get('translate') );
     // set method to POST
     $this->setMethod('post');
     /*
      * hidden fields
      */
     $acl = $this->addElement('hidden', 'acl', array('decorators' => $this->elDecorators));
     $role_id = $this->addElement('hidden', 'role_id', array('decorators' => $this->elDecorators));
     /*
      * Order role
      */
     $order = $this->createElement('text', 'order', array('label' => $this->translate->_('Order') . '*', 'required' => true, 'size' => 3, 'maxlength' => 5));
     $order->addValidator('Int')->setRequired(true);
     /*
      * Name role
      */
     $name = $this->createElement('text', 'role_name', array('label' => $this->translate->_('Name') . '*', 'required' => true, 'size' => 30, 'maxlength' => 50));
     $name_validator = new Zend_Validate_Regex('/^[a-zA-Z0-9_]+$/');
     $name_validator->setMessage($this->translate->_('Role name incorrect. This contains only english alphabetical characters, digits and underscore.'));
     $name->addValidator('StringLength', false, array(2, 50))->addValidator($name_validator)->setRequired(true);
     /*
      * Description role
      */
     $description = $this->createElement('textarea', 'description', array('label' => $this->translate->_('Description') . '*', 'required' => true, 'cols' => 50, 'rows' => 3));
     $description->setRequired(true);
     /*
      * Inherited role id
      */
     Zend_Loader::loadClass('Wbroles');
     $table = new Wbroles();
     if ($this->_roleid) {
         $where = $table->getAdapter()->quoteInto('id != ?', $this->_roleid);
     } else {
         $where = null;
     }
     $rows = $table->fetchAll($where, 'id');
     // create element
     $inherit_id = $this->createElement('select', 'inherit_id', array('label' => $this->translate->_('Inherited role'), 'class' => 'ui-select', 'size' => 10));
     $inherit_id->addMultiOption('', '');
     foreach ($rows as $v) {
         $inherit_id->addMultiOption($v['id'], $v['name']);
     }
     unset($table);
     /*
      * submit button
      */
     $submit = new Zend_Form_Element_Submit('submit', array('decorators' => $this->elDecorators, 'id' => 'ok_' . __CLASS__, 'class' => 'prefer_btn', 'label' => $this->translate->_('Submit Form')));
     /*
      * reset button
      */
     $reset = new Zend_Form_Element_Reset('reset', array('decorators' => $this->elDecorators, 'id' => 'reset_' . __CLASS__, 'label' => $this->translate->_('Cancel')));
     /*
      *  add elements to form
      */
     $this->addElements(array($order, $name, $description, $inherit_id, $submit, $reset));
 }
 public function init()
 {
     $this->translate = Zend_Registry::get('translate');
     //Zend_Form::setDefaultTranslator( Zend_Registry::get('translate') );
     // set method to POST
     $this->setMethod('post');
     /*
      * hidden fields
      */
     $role_id = $this->addElement('hidden', 'role_id', array('decorators' => $this->elDecorators, 'value' => $this->role_id));
     $role_name = $this->addElement('hidden', 'role_name', array('decorators' => $this->elDecorators, 'value' => $this->role_name));
     /*
      * From Bacula database
      */
     Zend_Loader::loadClass('Wbroles');
     $table = new Wbroles();
     $data = $table->getBaculaFill($this->table_bacula, $this->table_webacula, $this->role_id);
     $bacula_fill = $this->createElement('multiselect', 'bacula_fill', array('label' => $this->translate->_('From Bacula database'), 'class' => 'ui-select', 'size' => 10));
     $bacula_fill->addMultiOptions(array('*all*' => '*all*'));
     foreach ($data as $v) {
         $bacula_fill->addMultiOptions(array($v['name'] => $v['name']));
     }
     unset($table);
     /*
      * submit button
      */
     $submit = new Zend_Form_Element_Submit('submit', array('decorators' => $this->elDecorators, 'id' => 'ok_' . __CLASS__, 'class' => 'prefer_btn', 'label' => $this->translate->_('Add')));
     /*
      *  add elements to form
      */
     $this->addElements(array($bacula_fill, $submit));
 }
Ejemplo n.º 4
0
 public function __construct()
 {
     /*
      * fetch all roles
      */
     $table = new Wbroles();
     $roles = $table->fetchAllRoles();
     unset($table);
     // Loop roles and put them in an assoc array by ID
     $roleArray = array();
     foreach ($roles as $r) {
         $role = new Zend_Acl_Role($r['name']);
         // If inherit_name isn't null, have the role inherit from that, otherwise no inheriting
         if ($r['inherit_name'] !== null && $r['inherit_name'] !== $r['name']) {
             $this->addRole($role, $r['inherit_name']);
         } else {
             $this->addRole($role);
         }
         $roleArray[$r['id']] = $role;
     }
     /*
      *  fetch all resources
      *  because the Resource must be unique identifier
      */
     $table = new Wbresources();
     $resources = $table->fetchAllResources();
     foreach ($resources as $r) {
         $resource = new Zend_Acl_Resource($r['name']);
         $this->addResource($resource);
     }
     /*
      * establish a correspondence: roles => resources
      */
     $resources_roles = $table->fetchAllResourcesAndRoles();
     foreach ($resources_roles as $r) {
         if ($r['role_id'] !== null) {
             $role = $roleArray[$r['role_id']];
             // the Resource must be unique identifier
             $this->allow($role, $r['resource_name']);
         }
     }
     // Администратор не наследует ни от кого, но обладает всеми привилегиями
     $this->allow('root_role');
 }
Ejemplo n.º 5
0
 public function roleMoreInfoAction()
 {
     $role_id = $this->_request->getParam('role_id');
     if (empty($role_id)) {
         throw new Exception(__METHOD__ . ' : Empty $role_id parameter');
     }
     $this->view->role_id = $role_id;
     // get Role name
     $table = new Wbroles();
     $role = $table->fetchRow($table->getAdapter()->quoteInto('id = ?', $role_id));
     $this->view->title = 'Webacula :: ' . $this->view->translate->_('Role') . ' :: ' . $role->name;
     // inherited roles
     $this->view->inherited_roles = $table->getParentNames($role_id);
     // who use
     $this->view->roles = $table->listWhoRolesUseRole($role_id);
     $this->view->users = $table->listWhoUsersUseRole($role_id);
 }
Ejemplo n.º 6
0
 public function init()
 {
     Zend_Loader::loadClass('Zend_Validate_Regex');
     $this->translate = Zend_Registry::get('translate');
     //Zend_Form::setDefaultTranslator( Zend_Registry::get('translate') );
     // set method to POST
     $this->setMethod('post');
     /*
      * hidden fields
      */
     $user_id = $this->addElement('hidden', 'user_id', array('decorators' => $this->elDecorators));
     $action_id = $this->addElement('hidden', 'action_id', array('decorators' => $this->elDecorators));
     /*
      * Login
      */
     $login = $this->createElement('text', 'login', array('label' => $this->translate->_('Login') . '*', 'required' => true, 'size' => 30, 'maxlength' => 50));
     $login_validator = new Zend_Validate_Regex('/^[a-zA-Z0-9_]+$/');
     $login_validator->setMessage($this->translate->_('Login incorrect. Login contains only english alphabetical characters, digits and underscore.'));
     $login->addValidator('StringLength', false, array(2, 50))->addValidator($login_validator)->setRequired(true);
     /*
      * Password
      */
     $pwd_label = $this->translate->_('Password');
     if ($this->_action != 'update') {
         $pwd_label .= '*';
     }
     $pwd = $this->createElement('password', 'pwd', array('label' => $pwd_label, 'size' => 25, 'maxlength' => 50));
     $pwd->addValidator('StringLength', false, array(1, 50));
     if ($this->_action != 'update') {
         $pwd->setRequired(true);
     }
     /*
      * Name
      */
     $name = $this->createElement('text', 'name', array('label' => $this->translate->_('Name'), 'required' => false, 'size' => 40, 'maxlength' => 150));
     $name->addValidator('StringLength', false, array(2, 150));
     /*
      * Email
      */
     $email = $this->createElement('text', 'email', array('label' => $this->translate->_('Email'), 'required' => false, 'size' => 30, 'maxlength' => 50));
     $email_validator = new Zend_Validate_Regex('/^(.+)@([^@]+)$/');
     $email_validator->setMessage($this->translate->_('Email incorrect.'));
     $email->addValidator('StringLength', false, array(3, 50))->addValidator($email_validator);
     /*
      *  active
      */
     $active = $this->createElement('checkbox', 'active', array('label' => $this->translate->_('Active'), 'checked' => 1));
     /*
      * Role id
      */
     Zend_Loader::loadClass('Wbroles');
     $table = new Wbroles();
     $rows = $table->fetchAll(null, 'id');
     // create element
     $role_id = $this->createElement('select', 'role_id', array('label' => $this->translate->_('Role') . '*', 'class' => 'ui-select', 'size' => 10));
     foreach ($rows as $v) {
         $role_id->addMultiOption($v['id'], $v['name']);
     }
     $role_id->setRequired(true);
     unset($table);
     /*
      * submit button
      */
     $submit = new Zend_Form_Element_Submit('submit', array('decorators' => $this->elDecorators, 'id' => 'ok_' . __CLASS__, 'class' => 'prefer_btn', 'label' => $this->translate->_('Submit Form')));
     /*
      * reset button
      */
     $reset = new Zend_Form_Element_Reset('reset', array('decorators' => $this->elDecorators, 'id' => 'reset_' . __CLASS__, 'label' => $this->translate->_('Cancel')));
     /*
      *  add elements to form
      */
     $this->addElements(array($login, $pwd, $name, $email, $active, $role_id, $action_id, $submit, $reset));
 }
Ejemplo n.º 7
0
 /**
  *
  * @param string $acl
  * @return array (2 dimensional) of ACLs
  */
 protected function getAcl($acl)
 {
     if (!in_array($acl, $this->bacula_acls)) {
         throw new Exception(__METHOD__ . ' : "Invalid $acl parameter"');
     }
     $cache_id = $this->cache_id . $acl;
     // проверка, есть ли уже запись в кэше:
     if (!($acls2dim = $this->cache->load($cache_id))) {
         // промах кэша
         // get current role and all parents roles
         $table = new Wbroles();
         $roles = $table->getParentIds($this->ident->role_id);
         // get all Bacula ACLs and all parents Bacula ACLs
         switch ($acl) {
             case 'command':
                 $select = $this->db->select()->from(array('c' => $this->getAclTableName($acl)), array())->joinInner(array('dt' => 'webacula_dt_commands'), 'dt.id = c.dt_id', array('name'))->where('c.role_id IN (?)', $roles)->order('dt.id');
                 break;
             default:
                 $select = $this->db->select()->from($this->getAclTableName($acl), array('name'))->where('role_id IN (?)', $roles)->order('order_acl');
                 break;
         }
         $stmt = $select->query();
         $acls2dim = $stmt->fetchAll();
         // array
         // save to cache
         $this->cache->save($acls2dim, $cache_id, array($this->cache_tag));
     }
     return $acls2dim;
 }
 public function loginAction()
 {
     if ($this->isAuth()) {
         $this->_forward('index', 'index');
         // если уже залогинен: action, controller
         return;
     }
     $form = new formLogin();
     if ($this->_request->isPost()) {
         /* Проверяем валидность данных формы */
         if ($form->isValid($this->_getAllParams())) {
             $db = Zend_Registry::get('db_bacula');
             /**
              * Настраиваем правила выборки пользователей из БД
              * имя таблицы, название поля с идентификатором пользователя, название поля пароля
              *
              * [ $zendDb = null], [string $tableName = null], [string $identityColumn = null],
              * [string $credentialColumn = null], [string $credentialTreatment = null])
              */
             if (Zend_Registry::get('DB_ADAPTER') == 'PDO_SQLITE') {
                 // Sqlite do not have MD5 function
                 $authAdapter = new Zend_Auth_Adapter_DbTable($db, 'webacula_users', 'login', 'pwd', '? AND active = 1');
             } else {
                 $authAdapter = new Zend_Auth_Adapter_DbTable($db, 'webacula_users', 'login', 'pwd', 'MD5(?) AND active = 1');
             }
             /* Передаем в адаптер данные пользователя */
             $authAdapter->setIdentity($form->getValue('login'));
             $authAdapter->setCredential($form->getValue('pwd'));
             /* Собственно, процесс аутентификации */
             $auth = Zend_Auth::getInstance();
             $resultAuth = $auth->authenticate($authAdapter);
             /* Проверяем валидность результата */
             if ($resultAuth->isValid()) {
                 /* Пишем в сессию (default) необходимые нам данные (пароль обнуляем) */
                 $storage = $auth->getStorage();
                 $data = $authAdapter->getResultRowObject(array('id', 'login', 'role_id', 'role_name', 'email'));
                 // find role name
                 $table = new Wbroles();
                 $row = $table->find($data->role_id);
                 if ($row->count() == 1) {
                     $data->role_name = $row[0]['name'];
                 }
                 $storage->write($data);
                 // обнуляем счетчик неудачных логинов
                 if (isset($this->defNamespace->numLoginFails)) {
                     $this->defNamespace->numLoginFails = 0;
                 }
                 // remember me
                 if ($form->getValue('rememberme')) {
                     Zend_Session::rememberMe(self::MAX_LIFETIME);
                     Zend_Session::getSaveHandler()->setLifetime(self::MAX_LIFETIME);
                 }
                 // update user statistics
                 $users = new Wbusers();
                 $users->updateLoginStat($data->login);
                 // goto home page
                 $this->_redirect('index/index');
             } else {
                 sleep(7);
                 $this->view->msg = $this->view->translate->_("Username or password is incorrect");
                 // включаем счетчик, если кол-во неудачных логинов большое то включаем капчу
                 $this->defNamespace->numLoginFails++;
             }
         }
     }
     /* Если данные не передавались или неверный логин, то выводим форму для авторизации */
     $this->view->caption = sprintf($this->view->translate->_("Login with your %sWe%sbacula%s account"), '<font color="#00008B">', '</font><font color="#A80000">', '</font>');
     $this->view->title = $this->view->translate->_('Login with your Webacula account');
     $this->view->form = $form;
     // workaround for unit tests 'Action Helper by name Layout not found'
     if (!$this->_helper->hasHelper('layout')) {
         $this->render();
     }
 }