public function actionView($id) { $user = User::findOne($id); if (self::can("user/read")) { $roles = UserDomainRole::find()->where(['user_id' => $user->id])->all(); $filtered = []; foreach ($roles as $role) { if ($role->getGroup()->type == Group::TYPE_DOMAIN) { $filtered[] = $role->id; } } $queryDomain = UserDomainRole::find()->where(['in', 'id', $filtered]); } else { if (self::can("role/read")) { $allowedDomains = self::whichDomainsCan('role/read'); $domains_name = []; foreach ($allowedDomains as $domain) { $domains_name[] = $domain->name; } $roles = UserDomainRole::find()->where(['user_id' => $user->id])->andWhere(['in', 'domain', $domains_name])->all(); $filtered = []; foreach ($roles as $role) { if ($role->getGroup()->type == Group::TYPE_DOMAIN) { $filtered[] = $role->id; } } $queryDomain = UserDomainRole::find()->where(['in', 'id', $filtered]); } } $domainProvider = new ActiveDataProvider(['query' => $queryDomain, 'pagination' => ['pageSize' => 5], 'sort' => false]); $roles = UserDomainRole::find()->where(['user_id' => $user->id])->all(); $filtered = []; if (self::can("user/read")) { foreach ($roles as $role) { if ($role->getGroup()->type == Group::TYPE_SYSTEM) { $filtered[] = $role->id; } } } $querySystem = UserDomainRole::find()->where(['in', 'id', $filtered]); $systemProvider = new ActiveDataProvider(['query' => $querySystem, 'pagination' => ['pageSize' => 5], 'sort' => false]); return $this->render('view', array('model' => $user, 'domainRolesProvider' => $domainProvider, 'systemRolesProvider' => $systemProvider)); }
static function can($permissions = null, $domain = null, $redirect = false) { if (!is_array($permissions)) { if ($permissions) { $permissions = [$permissions]; } } $userId = Yii::$app->user->getId(); if ($domain != null) { $roles = UserDomainRole::find()->where(['user_id' => $userId, 'domain' => $domain])->all(); foreach ($roles as $role) { if (self::checkPermission($permissions, $role)) { return true; } } $roles = UserDomainRole::find()->where(['user_id' => $userId, 'domain' => null])->all(); foreach ($roles as $role) { if (self::checkPermission($permissions, $role)) { return true; } } } else { $roles = UserDomainRole::find()->where(['user_id' => $userId])->all(); foreach ($roles as $role) { if (self::checkPermission($permissions, $role)) { return true; } } } if ($redirect) { self::redirectToErrorPage(); } return false; }
public function searchByDomains($params, $allowed_domains, $root) { $this->load($params); Yii::trace($this->domain); $domains_name = []; foreach ($allowed_domains as $domain) { $domains_name[] = $domain->name; } if (!$root) { if ($this->domain) { $users = UserDomainRole::find()->where(['in', 'domain', $this->domain])->all(); } else { $users = UserDomainRole::find()->where(['in', 'domain', $domains_name])->all(); } $users_id = []; foreach ($users as $user) { $users_id[] = $user->user_id; } } else { if ($this->domain) { $users = UserDomainRole::find()->where(['in', 'domain', $this->domain])->all(); $users_id = []; foreach ($users as $user) { $users_id[] = $user->user_id; } } else { $users = User::find()->all(); $users_id = []; foreach ($users as $user) { $users_id[] = $user->id; } } } $users = User::find()->where(['in', 'id', $users_id])->all(); $userForm = []; foreach ($users as $user) { $aux = new UserSearchForm(); if ($this->domain) { $count = UserDomainRole::find()->where(['user_id' => $user->id, 'domain' => $this->domain])->count(); } else { if (!$root) { $count = UserDomainRole::find()->where(['user_id' => $user->id])->andWhere(['in', 'domain', $domains_name])->select('DISTINCT `domain`')->count(); } else { $count = UserDomainRole::find()->where(['user_id' => $user->id])->select('DISTINCT `domain`')->count(); } } $aux->setData($user, $count); $userForm[$aux->id] = $aux; } $data = new ArrayDataProvider(['allModels' => $userForm, 'sort' => false, 'pagination' => ['pageSize' => 15]]); return $data; }
public function actionUpdateRoleSystem($id) { $udr = UserDomainRole::findOne($id); if (!$udr) { if (!self::can("user/read")) { return $this->goHome(); } else { Yii::$app->getSession()->addFlash('warning', Yii::t('topology', 'Role not found')); return $this->redirect(array('/aaa/user/view', 'id' => $udr->user_id)); } } if (!self::can("user/update")) { if (!self::can("role/read")) { return $this->goHome(); } else { Yii::$app->getSession()->addFlash('warning', Yii::t('aaa', 'You are not allowed to update roles')); return $this->redirect(array('/aaa/user/view', 'id' => $udr->user_id)); } } $udr->getGroup(); $group = $udr->getGroup(); if (isset($_POST["UserDomainRole"])) { $form = $_POST["UserDomainRole"]; $udr->_groupRoleName = $form["_groupRoleName"]; $roleDomain = null; $alreadyHas = false; $roles = UserDomainRole::find()->where(['domain' => $udr->domain, 'user_id' => $udr->user_id])->all(); foreach ($roles as $role) { if ($role->getGroup()->role_name == $udr->_groupRoleName) { $alreadyHas = true; break; } } if ($alreadyHas) { Yii::$app->getSession()->setFlash("warning", Yii::t("aaa", 'The user already has this profile')); return $this->redirect(array('/aaa/user/view', 'id' => $udr->user_id)); } else { if ($udr->save()) { AaaNotification::createRole($udr); AaaNotification::deleteRole($udr, $group); Yii::$app->getSession()->setFlash("success", Yii::t("aaa", 'Role updated successfully')); return $this->redirect(array('/aaa/user/view', 'id' => $udr->user_id)); } else { foreach ($udr->getErrors() as $attribute => $error) { Yii::$app->getSession()->setFlash("error", $error[0]); } } } } $groups = []; foreach ($udr->getSystemGroupsNoArray() as $group) { $groups[$group->role_name] = $group->name; } return $this->renderPartial('_edit-role-system', array('udr' => $udr, 'groups' => $groups)); }
public function getUserDomainsRoles() { return UserDomainRole::find()->where(['domain' => $this->name])->orWhere(['domain' => null]); }