/** * 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); } }
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)); }
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'); }
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); }
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)); }
/** * * @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(); } }