AdminRoleForm.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. namespace backendApi\modules\v1\models;
  3. use common\components\Model;
  4. use common\helpers\Date;
  5. use common\helpers\Tool;
  6. use common\libs\logging\operate\AdminOperate;
  7. use yii\helpers\Json;
  8. /**
  9. * Login form
  10. */
  11. class AdminRoleForm extends Model
  12. {
  13. public $id;
  14. public $roleName;
  15. public $remark;
  16. public $permission;
  17. public $columnPermission;
  18. public function init() {
  19. parent::init();
  20. $this->adminOperateLogger = new AdminOperate([
  21. 'fetchClass' => AdminRole::class,
  22. ]);
  23. }
  24. /**
  25. * @inheritdoc
  26. */
  27. public function rules()
  28. {
  29. return [
  30. [['id', 'roleName', 'permission', 'columnPermission'], 'trim'],
  31. [['id', 'roleName', 'permission'], 'required'],
  32. [['roleName'], 'unique', 'on' => 'update', 'targetClass' => AdminRole::class, 'targetAttribute' => 'ROLE_NAME', 'when' => function ($model) {
  33. return $model->isAttributeChanged('ROLE_NAME');
  34. }],
  35. [['id'], 'exist', 'targetClass' => AdminRole::class, 'targetAttribute' => 'ID'],
  36. [['roleName', 'remark'], 'trim'],
  37. ];
  38. }
  39. /**
  40. * 指定校验场景
  41. * @return array
  42. */
  43. public function scenarios() {
  44. $parentScenarios = parent::scenarios();
  45. $customScenarios = [
  46. 'add' => ['roleName','remark'],
  47. 'edit' => ['id', 'roleName', 'remark'],
  48. 'permission' => ['id', 'permission'],
  49. 'columnPermission' => ['id', 'columnPermission'],
  50. ];
  51. return array_merge($parentScenarios, $customScenarios);
  52. }
  53. public function attributeLabels()
  54. {
  55. return [
  56. 'roleName' => '角色名称',
  57. 'remark' => '备注',
  58. ];
  59. }
  60. /**
  61. * 添加角色
  62. * @return AdminRole|null
  63. */
  64. public function add(){
  65. if(!$this->validate()){
  66. return null;
  67. }
  68. $model = new AdminRole();
  69. $model->ROLE_NAME = $this->roleName;
  70. $model->REMARK = $this->remark;
  71. $model->CREATE_ADMIN = \Yii::$app->user->id;
  72. $model->CREATED_AT = Date::nowTime();
  73. if(!$model->save()){
  74. $this->addErrors($model->getErrors());
  75. return null;
  76. }
  77. $this->adminOperateLogger->afterInsert($model)->clean()->save([
  78. 'optType' => '添加管理员角色',
  79. ]);
  80. return $model;
  81. }
  82. /**
  83. * 编辑角色
  84. * @return null|static
  85. */
  86. public function edit(){
  87. if(!$this->validate()){
  88. return null;
  89. }
  90. $model = AdminRole::findOne(['ID'=>$this->id]);
  91. $this->adminOperateLogger->beforeUpdate($model);
  92. $model->ROLE_NAME = $this->roleName;
  93. $model->REMARK = $this->remark;
  94. $model->UPDATE_ADMIN = \Yii::$app->user->id;
  95. $model->UPDATED_AT = Date::nowTime();
  96. if(!$model->save()){
  97. $this->addErrors($model->getErrors());
  98. return null;
  99. }
  100. $this->adminOperateLogger->afterUpdate($model)->clean()->save([
  101. 'optType' => '编辑管理员角色',
  102. ]);
  103. return $model;
  104. }
  105. /**
  106. * 设置管理员角色权限
  107. * @return null|static
  108. */
  109. public function permission(){
  110. if(!$this->validate()){
  111. return null;
  112. }
  113. $model = AdminRole::findOne(['ID'=>$this->id]);
  114. $this->adminOperateLogger->beforeUpdate($model);
  115. //$model->PERMISSION = Json::encode($this->permission);
  116. $model->UPDATE_ADMIN = \Yii::$app->user->id;
  117. $model->UPDATED_AT = Date::nowTime();
  118. if(!$model->save()){
  119. $this->addErrors($model->getErrors());
  120. return null;
  121. }
  122. // 把权限写入文件中
  123. $path = \Yii::getAlias('@common/runtime/permission/').$model->ID;
  124. file_put_contents($path, Json::encode($this->permission));
  125. $this->adminOperateLogger->afterUpdate($model)->clean()->save([
  126. 'optType' => '设置管理员角色权限',
  127. ]);
  128. return $model;
  129. }
  130. /**
  131. * 列表字段权限
  132. * @return AdminRole|null
  133. */
  134. public function columnPermission(){
  135. if(!$this->validate()){
  136. return null;
  137. }
  138. $model = AdminRole::findOne(['ID'=>$this->id]);
  139. $this->adminOperateLogger->beforeUpdate($model);
  140. $model->COLUMN_PERMISSION = base64_encode(Json::encode($this->columnPermission));
  141. $model->UPDATE_ADMIN = \Yii::$app->user->id;
  142. $model->UPDATED_AT = Date::nowTime();
  143. if(!$model->save()){
  144. $this->addErrors($model->getErrors());
  145. return null;
  146. }
  147. $this->adminOperateLogger->afterUpdate($model)->clean()->save([
  148. 'optType' => '设置管理员角色列表字段权限',
  149. ]);
  150. return $model;
  151. }
  152. /**
  153. * 删除管理员角色前
  154. * @param $selected
  155. * @throws \Exception
  156. */
  157. public function beforeDelete($selected) {
  158. $this->adminOperateLogger->setIsBatch(true)->beforeDelete($selected, 'ID');
  159. foreach ($selected as $id) {
  160. if(Admin::find()->where('ROLE_ID=:ROLE_ID',[':ROLE_ID'=>$id])->exists()){
  161. throw new \Exception('所选角色下有管理员不得删除');
  162. }
  163. }
  164. }
  165. /**
  166. * 删除管理员角色
  167. * @param $selected
  168. */
  169. public function delete($selected) {
  170. $this->adminOperateLogger->clean()->save([
  171. 'optType' => '删除管理员角色',
  172. ]);
  173. }
  174. }