/** * Setup the edit action form * * @param Admin_Model_DbRow_Action $action * @param Admin_Model_DbRow_Controller $controller */ public function __construct(Admin_Model_DbRow_Controller $controller, Admin_Model_DbRow_Action $action) { parent::__construct($controller); $this->addElement(new Zend_Form_Element_Hidden('id', array('required' => true, 'value' => $action->get('id'), 'order' => 11))); $this->getElement('action')->setValue($action->get('actionName')); $this->getElement('description')->setValue($action->get('description')); }
/** * Generate the Delete form * * @param Admin_Model_DbRow_Controller $controller * @param Admin_Model_DbRow_Action $action */ public function __construct(Admin_Model_DbRow_Controller $controller, Admin_Model_DbRow_Action $action) { parent::__construct($controller); $this->addElements(array(new Zend_Form_Element_Hidden('id', array('required' => true, 'value' => $action->get('id'), 'order' => 11)), new Zend_Form_Element_Checkbox('chkdelete', array('required' => true, 'label' => 'Really Delete?', 'checked' => false, 'order' => 6)))); $this->getElement('action')->setValue($action->get('actionName')); $this->getElement('description')->setValue($action->get('description'))->setAttrib('readonly', 'true'); }
/** * create the form to change permission * * in this form we can set the acl roles, which are allowed or denied * for this action * * @param Admin_Model_DbRow_Controller $controller * @param Admin_Model_DbRow_Action $action * @param array $roles array of Admin_Model_DbTable_Acl_Role Objects * @param array $rulesAllow * @param array $rulesDeny */ public function __construct(Admin_Model_DbRow_Controller $controller, Admin_Model_DbRow_Action $action, array $roles, array $rulesAllow, array $rulesDeny) { parent::__construct($controller); $rolesAllow = new Zend_Form_Element_MultiCheckbox('rolesallow', array('label' => 'Allow access', 'order' => 7)); $rolesDeny = new Zend_Form_Element_MultiCheckbox('rolesdeny', array('label' => 'Explicit Deny Access', 'order' => 8)); foreach ($roles as $role) { $rolesAllow->addMultiOption($role->get('id'), $role->get('name')); $rolesDeny->addMultiOption($role->get('id'), $role->get('name')); } $rolesAllow->setValue($rulesAllow); $rolesDeny->setValue($rulesDeny); $this->addElements(array($rolesAllow, $rolesDeny, new Zend_Form_Element_Hidden('id', array('required' => true, 'value' => $action->get('id'), 'order' => 11)))); // remove description element (from base form) $this->removeElement('description'); $this->getElement('action')->setValue($action->get('actionName')); }
/** * Change the Status of a controller (enabled/disabled) * * @view views/scripts/controller/status.phtml * @access public */ public function statusAction() { $ctrlRow = new Admin_Model_DbRow_Controller($this->dbCtrl->find($this->checkControllerIdParam())); $ctrlRow->set('enabled', $ctrlRow->get('enabled') == 1 ? 0 : 1); $this->dbCtrl->update($ctrlRow->toDbArray(array('enabled')), $ctrlRow->get('id')); // disabled all actions too, they are relevant in the ACL if ($ctrlRow->get('enabled') === 0) { $actionRow = new Admin_Model_DbRow_Action(array('enabled' => 0)); $actionDbModel = new Admin_Model_DbTable_Acl_Action(); $actionDbModel->updateWithControllerId($actionRow->toDbArray(array('enabled')), $ctrlRow->get('id')); } $this->_redirect('admin/controller/index'); }
/** * Save the Permission for an action * * @return array */ public function saveActionPermissionsAction() { $ruleModel = new Admin_Model_DbTable_Acl_Rule(); $roleModel = new Admin_Model_DbTable_Acl_Role(); $actionModel = new Admin_Model_DbTable_Acl_Action(); $data = Zend_Json::decode($this->request->getParam('permissions', array())); $return = array(); if (!is_array($data) || !empty($data['aId'])) { // if we have no array or the controller id is directly in the array // we nest the array in an array to get the foreach to work // extjs is sending object if only 1 row has changed and an array of object // if multiple changes occure $data = array($data); } foreach ($data as $el) { $role = $roleModel->find($el['roleId']); $action = $actionModel->find($el['aId']); // not an action provided or multiple controller found if ($action->count() !== 1) { continue; } // not a roleId provided or multiple roles found if ($role->count() !== 1) { continue; } $action = new Admin_Model_DbRow_Action($action->current()); $role = new Admin_Model_DbRow_Role($role->current()); if ($el['rule'] == Admin_Model_DbTable_Acl_Rule::RULE_DENY) { $rule = Admin_Model_DbTable_Acl_Rule::RULE_DB_DENY; } elseif ($el['rule'] == Admin_Model_DbTable_Acl_Rule::RULE_ALLOW) { $rule = Admin_Model_DbTable_Acl_Rule::RULE_DB_ALLOW; } else { $rule = NULL; } $ruleModel->deleteWithActionRole($action->get('id'), $role->get('id')); if ($rule !== NULL) { $permission = new Admin_Model_DbRow_Rule(array('mcId' => $action->get('mcId'), 'aId' => $action->get('id'), 'roleId' => $role->get('id'), 'rule' => $rule)); $ruleModel->insert($permission->toDbArray()); } $return[] = array('ident' => join("_", array($role->get('id'), $action->get('mcId'), $action->get('id'))), 'mcId' => $action->get('mcId'), 'aId' => $action->get('id'), 'roleName' => $role->get('name'), 'roleId' => $role->get('id'), 'rule' => $rule); } return $this->responseSuccess(array('permissions' => $return)); }
/** * change to permission for this action * * @view views/scripts/action/permission.phtml * @access public */ public function permissionAction() { $actionRow = new Admin_Model_DbRow_Action($this->dbAction->find($this->checkActionIdParam())); $ctrlRow = new Admin_Model_DbRow_Controller($this->dbController->find($actionRow->get('mcId'))); $dbRoles = new Admin_Model_DbTable_Acl_Role(); $dbRules = new Admin_Model_DbTable_Acl_Rule(); $roles = array(); $rules = array(); $allowRules = array(); $denyRules = array(); foreach ($dbRoles->fetchActiveRoles() as $row) { $roles[] = new Admin_Model_DbRow_Role($row); } foreach ($dbRules->fetchRulesForAction($actionRow->get('id')) as $row) { $rules[] = new Admin_Model_DbRow_Rule($row); } foreach ($rules as $rule) { if ($rule->get('rule') === Admin_Model_DbTable_Acl_Rule::RULE_DB_ALLOW) { $allowRules[] = $rule->get('roleId'); } elseif ($rule->get('rule') === Admin_Model_DbTable_Acl_Rule::RULE_DB_DENY) { $denyRules[] = $rule->get('roleId'); } } $form = new Admin_Form_Action_Permission($ctrlRow, $actionRow, $roles, $allowRules, $denyRules); $form->setAction('/noc/admin/action/permission'); if ($this->getRequest()->isPost()) { if ($form->isValid($this->getRequest()->getParams()) && $form->hasPermissionCollision($this->getRequest()) === FALSE) { $dbRules->deleteByActionId($actionRow->get('id')); $allow = (array) $form->getElement('rolesallow')->getValue(); $deny = (array) $form->getElement('rolesdeny')->getValue(); foreach ($allow as $roleId) { $dbRules->addRule($ctrlRow->get('id'), $actionRow->get('id'), $roleId, Admin_Model_DbTable_Acl_Rule::RULE_DB_ALLOW); } foreach ($deny as $roleId) { $dbRules->addRule($ctrlRow->get('id'), $actionRow->get('id'), $roleId, Admin_Model_DbTable_Acl_Rule::RULE_DB_DENY); } $this->_redirect(sprintf('admin/action/index/control/%d/id/%d', $ctrlRow->get('id'), $actionRow->get('id'))); } else { $form->addError('Mindestens eine Rolle wurde der Zugriff erlaubt und verweigert.'); } } $this->view->form = $form; $this->view->controller = $ctrlRow; }