| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 | <?phpnamespace common\modules\rbac\controllers;use common\modules\rbac\components\MenuHelper;use common\modules\rbac\models\Assignment;use common\modules\rbac\models\searchs\Assignment as AssignmentSearch;use Yii;use yii\filters\VerbFilter;use yii\web\Controller;use yii\web\NotFoundHttpException;use yii\web\Response;/** * AssignmentController implements the CRUD actions for Assignment model. * * @author Misbahul D Munir <misbahuldmunir@gmail.com> * * @since 1.0 */class AssignmentController extends Controller{    public $userClassName;    public $idField = 'id';    public $usernameField = 'username';    public $searchClass;    /**     * {@inheritdoc}     */    public function init()    {        parent::init();        if ($this->userClassName === null) {            $this->userClassName = Yii::$app->getUser()->identityClass;            $this->userClassName = $this->userClassName ?: 'common\models\User';        }    }    /**     * {@inheritdoc}     */    public function behaviors()    {        return [            'verbs' => [                'class' => VerbFilter::className(),                'actions' => [                    'assign' => ['post'],                ],            ],        ];    }    /**     * Lists all Assignment models.     *     * @return mixed     */    public function actionIndex()    {        if ($this->searchClass === null) {            $searchModel = new AssignmentSearch();        } else {            $class = $this->searchClass;            $searchModel = new $class();        }        $dataProvider = $searchModel->search(\Yii::$app->request->getQueryParams(), $this->userClassName, $this->usernameField);        return $this->render('index', [                'dataProvider' => $dataProvider,                'searchModel' => $searchModel,                'idField' => $this->idField,                'usernameField' => $this->usernameField,        ]);    }    /**     * Displays a single Assignment model.     *     * @param int $id     *     * @return mixed     */    public function actionView($id)    {        $model = $this->findModel($id);        return $this->render('view', [                'model' => $model,                'idField' => $this->idField,                'usernameField' => $this->usernameField,        ]);    }    /**     * Assign or revoke assignment to user.     *     * @param int    $id     * @param string $action     *     * @return mixed     */    public function actionAssign()    {        $post = Yii::$app->request->post();        $id = $post['id'];        $action = $post['action'];        $roles = $post['roles'];        $manager = Yii::$app->authManager;        $error = [];        if ($action == 'assign') {            foreach ($roles as $name) {                try {                    $item = $manager->getRole($name);                    $item = $item ?: $manager->getPermission($name);                    $manager->assign($item, $id);                } catch (\Exception $exc) {                    $error[] = $exc->getMessage();                }            }        } else {            foreach ($roles as $name) {                try {                    $item = $manager->getRole($name);                    $item = $item ?: $manager->getPermission($name);                    $manager->revoke($item, $id);                } catch (\Exception $exc) {                    $error[] = $exc->getMessage();                }            }        }        MenuHelper::invalidate();        Yii::$app->response->format = Response::FORMAT_JSON;        return[            'type' => 'S',            'errors' => $error,        ];    }    /**     * Search roles of user.     *     * @param int    $id     * @param string $target     * @param string $term     *     * @return string     */    public function actionSearch($id, $target, $term = '')    {        Yii::$app->response->format = 'json';        $authManager = Yii::$app->authManager;        $roles = $authManager->getRoles();        $permissions = $authManager->getPermissions();        $avaliable = [];        $assigned = [];        foreach ($authManager->getAssignments($id) as $assigment) {            if (isset($roles[$assigment->roleName])) {                if (empty($term) || strpos($assigment->roleName, $term) !== false) {                    $assigned['Roles'][$assigment->roleName] = $assigment->roleName;                }                unset($roles[$assigment->roleName]);            } elseif (isset($permissions[$assigment->roleName]) && $assigment->roleName[0] != '/') {                if (empty($term) || strpos($assigment->roleName, $term) !== false) {                    $assigned['Permissions'][$assigment->roleName] = $assigment->roleName;                }                unset($permissions[$assigment->roleName]);            }        }        if ($target == 'avaliable') {            if (count($roles)) {                foreach ($roles as $role) {                    if (empty($term) || strpos($role->name, $term) !== false) {                        $avaliable['Roles'][$role->name] = $role->name;                    }                }            }            if (count($permissions)) {                foreach ($permissions as $role) {                    if ($role->name[0] != '/' && (empty($term) || strpos($role->name, $term) !== false)) {                        $avaliable['Permissions'][$role->name] = $role->name;                    }                }            }            return $avaliable;        } else {            return $assigned;        }    }    /**     * 获取公司管理员角色     * @author nodelog     */    public function actionGetCompanyRole()    {    }    /**     * Finds the Assignment model based on its primary key value.     * If the model is not found, a 404 HTTP exception will be thrown.     *     * @param int $id     *     * @return Assignment the loaded model     *     * @throws NotFoundHttpException if the model cannot be found     */    protected function findModel($id)    {        $class = $this->userClassName;        if (($model = $class::findIdentity($id)) !== null) {            return $model;        } else {            throw new NotFoundHttpException('The requested page does not exist.');        }    }}
 |