/** * Store role * * @param array $roleData * @throws NotFoundException, ValidationException * @return \App\Models\RoleModel */ public function store($roleData) { try { if (array_get($roleData, 'id')) { $role = RoleModel::findOrFail((int) array_get($roleData, 'id'))->fill($roleData); } else { $role = new RoleModel(); $role->fill($roleData); } } catch (Exception $e) { throw new NotFoundException(trans('app.notFound')); } if (!$role->validate()) { throw new ValidationException(trans('app.correctErrors'), $role->errors()->toArray()); } try { $role->save(); // associate permissions if (array_get($roleData, 'permission_id')) { $role->perms()->sync(array_get($roleData, 'permission_id')); } } catch (Exception $e) { throw $e; } return $role; }
/** * Creates a new Role model. * If creation is successful, the browser will be redirected to the 'view' page. * @return mixed */ public function actionCreate() { $model = new Role(); $searchModel = new PermissionSearch(); $dataProvider = $searchModel->search([]); if ($model->load(Yii::$app->request->post())) { $postData = Yii::$app->request->post(); $model->createdAt = Yii::$app->util->getUtcDateTime(); $model->createdById = Yii::$app->user->identity->id; if (!empty($postData['selection'])) { if ($model->validate()) { try { if ($model->save()) { Yii::$app->session->setFlash('success', Yii::t('app', 'Role created')); foreach ($postData['selection'] as $permission) { $modelRolePermission = new RolePermission(); $modelRolePermission->roleName = $model->name; $modelRolePermission->permissionName = $permission; try { $modelRolePermission->save(); } catch (Exception $e) { } } return $this->redirect(['index']); } else { Yii::$app->session->setFlash('success', Yii::t('app', 'Role create failed')); } } catch (Exception $e) { if ($e->getCode() == 11000) { Yii::$app->session->setFlash('error', Yii::t('app', 'Role exists')); } else { Yii::$app->session->setFlash('error', Yii::t('app', 'Role create failed')); } } } } else { Yii::$app->session->setFlash('error', Yii::t('app', 'Please select atleast one permission')); } } return $this->render('create', ['model' => $model, 'dataProvider' => $dataProvider]); }