public function actionRightsAcoUpdate($aco_class, $aco_key, $aco_value, $operation, $value, $is_deny = 0) { $ret = true; $savedItems = AccessItem::model()->findAllByAttributes(array('aco_class' => $aco_class, 'aco_key' => $aco_key, 'aco_value' => $aco_value, 'action' => $operation, 'is_deny' => $is_deny)); $items = explode(',', $value); foreach ($items as $item) { list($aro_class, $aro_key, $aro_value) = explode(':', $item); $alreadySaved = false; foreach ($savedItems as $i => $saveItem) { if ($saveItem['aro_class'] == $aro_class && $saveItem['aro_key'] == $aro_key && $saveItem['aro_value'] == $aro_value) { $alreadySaved = true; unset($savedItems[$i]); break; } } if (!$alreadySaved) { $accessItem = new AccessItem(); $accessItem->aco_class = $aco_class; $accessItem->aco_key = $aco_key; $accessItem->aco_value = $aco_value; $accessItem->aro_class = $aro_class; $accessItem->aro_key = $aro_key; $accessItem->aro_value = $aro_value; $accessItem->action = $operation; $accessItem->is_deny = (bool) $is_deny; $ret = $ret && $accessItem->save(); } } foreach ($savedItems as $saveItem) { $saveItem->delete(); } echo intval($ret); }
protected function rightsForOperation($operation, $is_deny = 0) { $params = array('aco_class' => $this->objects[0], 'aco_key' => !empty($this->objects[1]) ? $this->objects[1] : '', 'aco_value' => !empty($this->objects[2]) ? $this->objects[2] : '', 'action' => $operation); $items = AccessItem::model()->findAllByAttributes($params); $data = array(); foreach ($items as $item) { if ($item['aro_class']) { $data[] = array('id' => $item->getAroId(), 'text' => $item->getAroText()); } } $extraResults = array(); $buildInRoles = Role::builtInRoles(); foreach ($buildInRoles as $roleName => $roleTitle) { $extraResults['User:roles:' . $roleName] = $roleTitle; } return $this->widget('Select2', array('name' => $this->htmlOptions['name'] . '[' . $operation . ']', 'id' => $this->htmlOptions['id'] . '_' . $operation, 'data' => $data, 'htmlOptions' => array('class' => 'rightsselect', 'data-aco_class' => $params['aco_class'], 'data-aco_key' => $params['aco_key'], 'data-aco_value' => $params['aco_value'], 'data-operation' => $params['action'], 'data-is_deny' => $is_deny), 'classNames' => array(array('User', 'User:id:', 'id', 'email,login,displayname'), array('User', 'User:roles:', '_roles.name', 'title'), $extraResults)), true); }