You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					163 lines
				
				5.1 KiB
			
		
		
			
		
	
	
					163 lines
				
				5.1 KiB
			| 
											8 years ago
										 | <?php
 | ||
|  | /**
 | ||
|  |  * Created by Error202
 | ||
|  |  * Date: 15.08.2017
 | ||
|  |  */
 | ||
|  | 
 | ||
|  | namespace backend\controllers;
 | ||
|  | 
 | ||
|  | use backend\forms\rbac\RbacEditRoleForm;
 | ||
|  | use backend\forms\rbac\RbacUpdateChildren;
 | ||
|  | use core\services\PermissionManager;
 | ||
|  | use yii\behaviors\TimestampBehavior;
 | ||
|  | use backend\forms\rbac\RbacCreateRoleForm;
 | ||
|  | use core\services\RoleManager;
 | ||
|  | use yii\data\ArrayDataProvider;
 | ||
|  | use yii\web\Controller;
 | ||
|  | use yii\filters\VerbFilter;
 | ||
|  | use yii\filters\AccessControl;
 | ||
|  | use Yii;
 | ||
|  | 
 | ||
|  | class RoleController extends Controller
 | ||
|  | {
 | ||
|  |     private $role;
 | ||
|  |     private $permission;
 | ||
|  | 
 | ||
|  |     public function __construct($id, $module, RoleManager $role, PermissionManager $permission, $config = [])
 | ||
|  |     {
 | ||
|  |         parent::__construct($id, $module, $config);
 | ||
|  |         $this->role = $role;
 | ||
|  |         $this->permission = $permission;
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     /**
 | ||
|  |      * @inheritdoc
 | ||
|  |      */
 | ||
|  |     public function behaviors()
 | ||
|  |     {
 | ||
|  |         return [
 | ||
|  |             [
 | ||
|  |                 'class' => TimestampBehavior::className(),
 | ||
|  |             ],
 | ||
|  |             'access' => [
 | ||
|  |                 'class' => AccessControl::className(),
 | ||
|  |                 'rules' => [
 | ||
|  |                     [
 | ||
|  |                         'actions' => ['create','view','index', 'update', 'delete'],
 | ||
|  |                         'allow' => true,
 | ||
|  |                         'roles' => ['UserManagement'],
 | ||
|  |                     ],
 | ||
|  |                     [    // all the action are accessible to admin
 | ||
|  |                         'allow' => true,
 | ||
|  |                         'roles' => ['admin'],
 | ||
|  |                     ],
 | ||
|  |                 ],
 | ||
|  |             ],
 | ||
|  |             'verbs' => [
 | ||
|  |                 'class' => VerbFilter::className(),
 | ||
|  |                 'actions' => [
 | ||
|  |                     'delete' => ['POST'],
 | ||
|  |                 ],
 | ||
|  |             ],
 | ||
|  |         ];
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public function actionIndex()
 | ||
|  |     {
 | ||
|  |         $data = $this->role->getRolesListArray();
 | ||
|  | 
 | ||
|  |         $dataProvider = new ArrayDataProvider([
 | ||
|  |             'allModels' => $data,
 | ||
|  |             'pagination' => [
 | ||
|  |                 'pageSize' => 20,
 | ||
|  |             ],
 | ||
|  |             'sort' => [
 | ||
|  |                 'attributes' => ['name', 'description'],
 | ||
|  |             ],
 | ||
|  |         ]);
 | ||
|  | 
 | ||
|  |         return $this->render('index', ['dataProvider' => $dataProvider]);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public function actionCreate()
 | ||
|  |     {
 | ||
|  |         $form = new RbacCreateRoleForm();
 | ||
|  |         if ($form->load(Yii::$app->request->post()) && $form->validate()) {
 | ||
|  |             try {
 | ||
|  |                 $this->role->create($form->name, $form->description, $form->rule_name, $form->data);
 | ||
|  |                 return $this->redirect(['view', 'id' => $form->name]);
 | ||
|  |             } catch (\DomainException $e) {
 | ||
|  |                 Yii::$app->errorHandler->logException($e);
 | ||
|  |                 Yii::$app->session->setFlash('error', $e->getMessage());
 | ||
|  |             }
 | ||
|  |         }
 | ||
|  |         return $this->render('create', [
 | ||
|  |             'model' => $form,
 | ||
|  |         ]);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public function actionUpdate($id)
 | ||
|  |     {
 | ||
|  |         $role = $this->findModel($id);
 | ||
|  | 
 | ||
|  |         $form = new RbacEditRoleForm($role);
 | ||
|  |         if ($form->load(Yii::$app->request->post()) && $form->validate()) {
 | ||
|  |             try {
 | ||
|  |                 $this->role->update($role->name, $form->name, $form->description, $form->rule_name, $form->data);
 | ||
|  |                 return $this->redirect(['view', 'id' => $form->name]);
 | ||
|  |             } catch (\DomainException $e) {
 | ||
|  |                 Yii::$app->errorHandler->logException($e);
 | ||
|  |                 Yii::$app->session->setFlash('error', $e->getMessage());
 | ||
|  |             }
 | ||
|  |         }
 | ||
|  |         return $this->render('update', [
 | ||
|  |             'model' => $form,
 | ||
|  |         ]);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public function actionDelete($id)
 | ||
|  |     {
 | ||
|  |         try {
 | ||
|  |             $this->role->delete($id);
 | ||
|  |         }
 | ||
|  |         catch (\DomainException $e)
 | ||
|  |         {
 | ||
|  |             Yii::$app->errorHandler->logException($e);
 | ||
|  |             Yii::$app->session->setFlash('error', $e->getMessage());
 | ||
|  |         }
 | ||
|  |         return $this->redirect(['index']);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     public function actionView($id)
 | ||
|  |     {
 | ||
|  |         $currentRole = $this->role->getRole($id);
 | ||
|  |         $rolesSelectArray = array_diff_assoc($this->role->getRolesSelectArray(), [$currentRole->name => $currentRole->description]);
 | ||
|  | 
 | ||
|  |         $itemsForm = new RbacUpdateChildren();
 | ||
|  |         if ($itemsForm->load(Yii::$app->request->post()) && $itemsForm->validate()) {
 | ||
|  |             $this->role->saveChildren($id, $itemsForm->roles, $itemsForm->permissions);
 | ||
|  |             Yii::$app->session->setFlash('success', Yii::t('user', 'Children roles and permissions for "{role}" is updated.', ['role' => $currentRole->description]));
 | ||
|  |         }
 | ||
|  | 
 | ||
|  |         $rolesSelected = $this->role->getRolesSelectArrayByRole($id);
 | ||
|  | 
 | ||
|  |         $permissionsSelectArray = $this->permission->getPermissionsSelectArray();
 | ||
|  |         $permissionsSelected = $this->permission->getPermissionsSelectArrayByRole($id);
 | ||
|  | 
 | ||
|  |         $itemsForm->roles = $rolesSelected;
 | ||
|  |         $itemsForm->permissions = $permissionsSelected;
 | ||
|  | 
 | ||
|  |         return $this->render('view', [
 | ||
|  |             'model' => $this->findModel($id),
 | ||
|  |             'roles' => $rolesSelectArray,
 | ||
|  |             'permissions' => $permissionsSelectArray,
 | ||
|  |             'permissionsSelected' => $permissionsSelected,
 | ||
|  |             'itemsForm' => $itemsForm,
 | ||
|  |         ]);
 | ||
|  |     }
 | ||
|  | 
 | ||
|  |     protected function findModel($id)
 | ||
|  |     {
 | ||
|  |         return $this->role->getRole($id);
 | ||
|  |     }
 | ||
|  | }
 |