コード例 #1
0
 public function actionAllUsers()
 {
     $nodes = $edges = [];
     $assignments = RbacModel::getAllAssignments();
     $uids = array_keys($assignments);
     $uClass = $this->module->userClass;
     if (count($uids) > $this->module->maxUsersForGraph) {
         \Yii::$app->session->setFlash('error', RbacModule::t('simplerbac', 'Too many users for show'));
         return $this->redirect(['index']);
     }
     $users = $uClass::find()->where([$this->module->userPk => $uids])->indexBy($this->module->userPk)->asArray()->all();
     foreach ($assignments as $uid => $data) {
         if (!isset($users[$uid])) {
             continue;
         }
         $nodes[] = ['data' => ['id' => "u{$uid}", 'username' => $users[$uid][$this->module->usernameAttribute], 'faveColor' => '#E13A69', 'faveShape' => 'ellipse', 'width' => mb_strlen($users[$uid][$this->module->usernameAttribute])]];
         $roles = \Yii::$app->authManager->getRolesByUser($uid);
         if (!empty($roles)) {
             foreach ($roles as $rol) {
                 $nodes[] = ['data' => ['id' => $rol->name, 'faveColor' => '#5F40B8', 'faveShape' => 'star', 'width' => mb_strlen($rol->name)]];
                 $edges[] = ['data' => ["id" => $rol->name . '_' . "{$uid}", 'source' => $rol->name, 'target' => "u{$uid}", 'faveColor' => '#5F40B8']];
                 $perms = \Yii::$app->authManager->getPermissionsByRole($rol->name);
                 if (!empty($perms)) {
                     foreach ($perms as $p) {
                         $nodes[] = ['data' => ['id' => $p->name, 'faveColor' => '#3AB5E1', 'faveShape' => 'rectangle', 'width' => mb_strlen($p->name)]];
                         $edges[] = ['data' => ["id" => $p->name . '_' . $rol->name, 'source' => $p->name, 'target' => $rol->name, 'faveColor' => '#3AB5E1']];
                     }
                 }
             }
         }
     }
     return $this->render('ugraph', ['elems' => Json::encode(['nodes' => $nodes, 'edges' => $edges])]);
 }