Role.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. <?php
  2. declare (strict_types = 1);
  3. namespace app\admin\controller;
  4. use app\admin\BaseController;
  5. use app\admin\model\ActionProcess as APModel;
  6. use app\admin\model\Process as PModel;
  7. use think\App;
  8. use think\facade\Db;
  9. use think\facade\Validate;
  10. class Role extends BaseController{
  11. public function __construct(App $app) {parent::__construct($app);}
  12. /**角色权限列表分页 page size
  13. * @return \think\response\Json|void
  14. * @throws \think\db\exception\DataNotFoundException
  15. * @throws \think\db\exception\DbException
  16. * @throws \think\db\exception\ModelNotFoundException
  17. */
  18. public function roleList(){
  19. $post=$this->request->only(["status"=>"","role_name"=>"","relaComNo"=>"","companyName"=>"","companyNo"=>"","level"=>"",
  20. "page"=>1,"size"=>10],"post","trim");
  21. $condition=[];
  22. isset($post['status'])&&$post['status']!=="" ? $condition[]=['a.status',"=",$post['status']]:"";
  23. isset($post['role_name'])&&$post['role_name']!=="" ? $condition[]=['a.role_name',"like","%".$post['role_name']."%"]:"";
  24. isset($post['level'])&&$post['level']!=="" ? $condition[]=["a.level","=",$post['level']]:"";
  25. isset($post['relaComNo'])&&$post['relaComNo']!=="" ? $condition[]=["a.companyNo","=",$post['relaComNo']]:"";
  26. isset($post['companyNo'])&&$post['companyNo']!=="" ? $condition[]=["a.companyNo","=",$post['companyNo']]:"";
  27. isset($post['companyName'])&&$post['companyName']!=="" ? $condition[]=["b.name","like","%{$post['companyName']}%"]:"";
  28. $count =Db::name("role")->alias("a")
  29. ->leftJoin("supplier_info b","a.companyNo=b.code")
  30. ->where($condition)->count();
  31. $page = isset($post['page']) ? intval($post['page']) : 1;
  32. $size = isset($post['size']) ? intval($post['size']) : 10;
  33. $page >=ceil($count/$size) ? $page= (int)ceil($count/$size) :"";
  34. $list=Db::name("role")->alias("a")
  35. ->leftJoin("supplier_info b","a.companyNo=b.code")
  36. ->leftJoin("role_action t","a.id=t.role_id")
  37. ->field("a.*,b.name as companyName,t.action_conllect as action,t.action_data")
  38. ->where($condition)->page($page,$size)->select();
  39. return app_show(0,"获取成功",["list"=>$list,"count"=>$count]);
  40. }
  41. /** 角色新建
  42. * @role_name 角色名称
  43. * @level 角色等级
  44. * @action 功能权限
  45. * @action_data 操作权限
  46. * @private_data 私有权限
  47. * @return \think\response\Json|void
  48. * @throws \think\db\exception\DataNotFoundException
  49. * @throws \think\db\exception\DbException
  50. * @throws \think\db\exception\ModelNotFoundException
  51. */
  52. public function roleAdd(){
  53. $post=$this->request->only(["role_name"=>"","level"=>"","action"=>"","action_data"=>"","private_data"=>"","relaComNo"=>"","companyNo"=>""],"post");
  54. $valid =Validate::rule([
  55. "role_name|角色名称"=>"require|max:255|min:2",
  56. "level|角色级别"=>"require|number|in:1,2,3",
  57. "relaComNo|业务公司编号"=>"max:255|min:3",
  58. "companyNo|业务公司编号"=>"max:255|min:3",
  59. "action|角色权限"=>"require|array",
  60. ]);
  61. if($valid->check($post)==false)return error_show(1004,$valid->getError());
  62. if($post['relaComNo']!=""&& $post["level"]==1){
  63. return error_show(1002,"超管权限角色不可关联业务公司");
  64. }
  65. if($this->level==1){
  66. $companyNo =$post['companyNo']??"";
  67. }else{
  68. $companyNo =$post['relaComNo']??"";
  69. }
  70. $where=[["role_name","=",$post['role_name']]];
  71. if($companyNo!=""){
  72. $where[]=["companyNo","=",$companyNo];
  73. // $company =Db::name("supplier_info")->where(["code"=>$companyNo])->find();
  74. }
  75. $isT=Db::name("role")->where($where)->find();
  76. if($isT){
  77. return error_show(1002,"角色名称已存在");
  78. }
  79. $action = isset($post['action'])&&is_array($post['action']) ? implode(",",$post['action']) : "";
  80. $data = isset($post['action_data']) &&is_array($post['action_data'])?implode(",",$post['action_data']): "";
  81. $private_data = isset($post['private_data']) &&is_array($post['private_data'])?implode(",",$post['private_data']): "";
  82. Db::startTrans();
  83. try {
  84. $list = [
  85. "role_name"=>$post['role_name'],
  86. "companyNo"=>$companyNo,
  87. "status"=>1,
  88. "addtime"=>date("Y-m-d H:i:s"),
  89. "updatetime"=>date("Y-m-d H:i:s"),
  90. "level"=>$post['level'],
  91. ];
  92. $role= Db::name("role")->insert($list,true);
  93. if($role>0){
  94. $role_action = [
  95. "role_id"=>$role,
  96. "action_conllect"=>$action,
  97. "action_data"=>$data,
  98. "private_data"=>$private_data,
  99. "status"=>1,
  100. "addtime"=>date("Y-m-d H:i:s"),
  101. "updatetime"=>date("Y-m-d H:i:s"),
  102. ];
  103. $roleaction= Db::name("role_action")->insert($role_action,true);
  104. if($roleaction){
  105. Db::commit();
  106. return app_show(0,"新建成功");
  107. }else{
  108. Db::rollback();
  109. return app_show(1005,"权限录入失败");
  110. }
  111. }else{
  112. Db::rollback();
  113. return app_show(1006,"角色新建失败");
  114. }
  115. }catch (\Exception $e){
  116. Db::rollback();
  117. return error_show(1008,$e->getMessage());
  118. }
  119. }
  120. /**查询角色信息
  121. * @roleid 角色id
  122. * @return \think\response\Json|void
  123. * @throws \think\db\exception\DataNotFoundException
  124. * @throws \think\db\exception\DbException
  125. * @throws \think\db\exception\ModelNotFoundException
  126. */
  127. public function roleInfo(){
  128. $post=$this->post;
  129. $roleid= isset($post['roleid']) ? trim($post['roleid']) : "";
  130. if($roleid==""){
  131. return error_show(1001,'roleid不能为空');
  132. }
  133. $info =Db::name("role")->alias("a")
  134. ->leftJoin("cfp_role_action t","a.id=t.role_id")
  135. ->field("a.*,t.action_conllect,t.action_data,t.private_data")
  136. ->where("a.id","=",$roleid)->find();
  137. if(!$info){
  138. return error_show(1002,"未找到对应的数据");
  139. }
  140. $info['action'] =explode(",",$info['action_conllect']);
  141. $info['action_data'] =$info['action_data']!=""?explode(",",$info['action_data']):"";
  142. $info['private_data'] =$info['private_data']!=""?explode(",",$info['private_data']) :"";
  143. return app_show(0,"获取成功",$info);
  144. }
  145. /** 角色信息编辑
  146. * @param role_name 角色名称
  147. * @param level 等级
  148. * @param action 功能权限
  149. * @param action_data 操作权限
  150. * @param roleid 角色id
  151. * @param private_data 私有权限
  152. * @return \think\response\Json|void
  153. * @throws \think\db\exception\DataNotFoundException
  154. * @throws \think\db\exception\DbException
  155. * @throws \think\db\exception\ModelNotFoundException
  156. */
  157. public function roleSave(){
  158. $post=$this->request->only(["roleid"=>"","role_name"=>"","relaComNo"=>"","action"=>"","action_data"=>"","private_data"=>""],"post");
  159. $valid=Validate::rule([
  160. "role_name|角色名称"=>"require|max:255|min:3",
  161. "relaComNo|业务公司编号"=>"max:255|min:3",
  162. "action|角色权限"=>"require|array",
  163. ]);
  164. if($valid->check($post)==false)return error_show(1004,$valid->getError());
  165. $info =Db::name("role")->where("id","=",$post['roleid'])->find();
  166. if(!$info){
  167. return error_show(1002,"未找到对应的数据");
  168. }
  169. if($post['relaComNo']!=""&& $info["level"]==1){
  170. return error_show(1002,"超管权限角色不可关联业务公司");
  171. }
  172. $vers= Db::name("role")->where([["id",'<>',$post['roleid']],["role_name","=",$post['role_name']],["companyNo","=",$post['relaComNo']]])->find();
  173. if($vers){
  174. return error_show(1002,"角色名已存在");
  175. }
  176. $action = isset($post['action'])&&is_array($post['action']) ? implode(",",$post['action']) : "";
  177. if($action==""){
  178. return error_show(1004,"功能权限不能为空");
  179. }
  180. $data = isset($post['action_data']) &&is_array($post['action_data'])?implode(",",$post['action_data']): "";
  181. $private_data = isset($post['private_data']) &&is_array($post['private_data'])?implode(",",$post['private_data']): "";
  182. Db::startTrans();
  183. try {
  184. $list = [
  185. "role_name"=>$post['role_name'],
  186. "companyNo"=>$post['relaComNo'],
  187. "updatetime"=>date("Y-m-d H:i:s"),
  188. 'id'=>$post['roleid']
  189. ];
  190. $role= Db::name("role")->save($list);
  191. if($role){
  192. $role_action = [
  193. "role_id"=>$post['roleid'],
  194. "action_conllect"=>$action,
  195. "action_data"=>$data,
  196. "private_data"=>$private_data,
  197. "updatetime"=>date("Y-m-d H:i:s")
  198. ];
  199. $roleaction= Db::name("role_action")->where("role_id","=",$post['roleid'])->update($role_action);
  200. if($roleaction){
  201. Db::commit();
  202. return app_show(0,"更新成功");
  203. }else{
  204. Db::rollback();
  205. return app_show(1005,"权限更新失败");
  206. }
  207. }else{
  208. Db::rollback();
  209. return app_show(1006,"角色更新失败");
  210. }
  211. }catch (\Exception $e){
  212. Db::rollback();
  213. return error_show(1008,$e->getMessage());
  214. }
  215. }
  216. /**
  217. * 角色状态更新
  218. * @roleid 角色id
  219. * @status 角色状态 0 /1
  220. * @return \think\response\Json
  221. * @throws \think\exception\DbException
  222. */
  223. public function roleStatus(){
  224. $post=$this->request->only(["roleid"=>"","status"=>""],"post","intval");
  225. $valid=Validate::rule([
  226. "roleid|角色id"=>"require|number|gt:0",
  227. "status|状态"=>"require|number|in:0,1"
  228. ]);
  229. if($valid->check($post)==false)return error_show(1004,$valid->getError());
  230. Db::startTrans();
  231. try {
  232. $dat=[
  233. 'status'=>$post['status'],'updatetime'=>date("Y-m-d H:i:s"), 'id'=>$post['roleid']
  234. ];
  235. $re = Db::name("role")->save($dat);
  236. if($re){
  237. $dat2=[
  238. 'status'=>$post['status'],'updatetime'=>date("Y-m-d H:i:s")
  239. ];
  240. $action = Db::name("role_action")->where("role_id","=",$post['roleid'])->update($dat2);
  241. if($action){
  242. Db::commit();
  243. return app_show(0,"状态更新成功");
  244. }
  245. }
  246. Db::rollback();
  247. return error_show(1003,"状态更新失败");
  248. }catch (\Exception $e){
  249. Db::rollback();
  250. return error_show(1002,$e->getMessage());
  251. }
  252. }
  253. /**
  254. * 获取所有角色
  255. * @return \think\response\Json
  256. * @throws \think\exception\DbException
  257. */
  258. public function RoleAll(){
  259. $post=$this->request->only(["relaComNo"=>"","companyNo"=>""],"post","trim");
  260. $where=[];
  261. if(isset($post['relaComNo']) && $post['relaComNo']!='')$where[]=["companyNo","=",$post['relaComNo']];
  262. if(isset($post['companyNo'])&& $post['companyNo']!='')$where[]=["companyNo","=",$post['companyNo']];
  263. $list =Db::name("role")->alias("a")
  264. ->leftJoin("supplier_info b","a.companyNo=b.code")
  265. ->field("a.*,b.name as companyName")
  266. ->where($where)->select();
  267. return app_show(0,"获取成功",$list);
  268. }
  269. //获取角色对应的流程权限id
  270. public function roleProcessInfo()
  271. {
  272. $roleid = $this->request->filter('trim')->post('roleid/d', 0);
  273. $res = Db::name("role")
  274. ->alias("a")
  275. ->leftJoin("role_process b", "a.id=b.role_id AND b.is_del=0")
  276. ->field("a.*,b.action_data")
  277. ->withAttr('action_data', function ($val) {
  278. return explode(',', $val);
  279. })->where("a.id", $roleid)
  280. ->findOrEmpty();
  281. return app_show(0, '请求成功', $res);
  282. }
  283. //修改角色对应的流程权限
  284. public function roleProcessSave()
  285. {
  286. $param = $this->request->filter('trim')->only(['token', 'roleid', 'action_data'], 'post');
  287. $val = Validate::rule([
  288. 'token' => 'require',
  289. 'roleid|角色ID' => 'require|number|gt:0',
  290. 'action_data|所选节点id' => 'require|array',
  291. ]);
  292. if (!$val->check($param)) return error_show(1005, $val->getError());
  293. $user = GetUserInfo($param['token']);
  294. $uid = isset($user['data']['id']) ? $user['data']['id'] : 0;
  295. $uname = isset($user['data']['nickname']) ? $user['data']['nickname'] : '';
  296. $date = date('Y-m-d H:i:s');
  297. $res = Db::name('role_process')
  298. ->where(['is_del' => 0, 'role_id' => $param['roleid']])
  299. ->field('id')
  300. ->findOrEmpty();
  301. if (empty($res)) {
  302. $rs = Db::name('role_process')
  303. ->insert([
  304. 'role_id' => $param['roleid'],
  305. 'action_data' => implode(',', $param['action_data']),
  306. 'is_del' => 0,
  307. 'createrid' => $uid,
  308. 'creater' => $uname,
  309. 'addtime' => $date,
  310. 'updaterid' => $uid,
  311. 'updater' => $uname,
  312. 'updatetime' => $date,
  313. ]);
  314. } else {
  315. $rs = Db::name('role_process')
  316. ->where('id', $res['id'])
  317. ->update([
  318. 'action_data' => implode(',', $param['action_data']),
  319. 'updaterid' => $uid,
  320. 'updater' => $uname,
  321. 'updatetime' => $date
  322. ]);
  323. }
  324. return $rs ? app_show(0, '操作成功') : error_show(1005, '操作失败');
  325. }
  326. //获取角色对应的流程权限详情
  327. public function roleProcessDetail()
  328. {
  329. $roleid = $this->request->filter('trim')->post('roleid/d', 0);
  330. $action_data = Db::name("role_process")
  331. ->where('role_id', $roleid)
  332. ->value('action_data');
  333. $data = PModel::where(['is_del' => PModel::$is_del_normal, 'status' => PModel::$status_normal])
  334. ->append(['child'])
  335. ->withAttr('child', function () {
  336. return [];
  337. })
  338. ->column('id,process_name,process_type', 'id');
  339. $action = APModel::where([
  340. 'is_del' => APModel::$is_del_normal,
  341. 'status' => APModel::$status_normal,
  342. 'operation_type' => APModel::$operation_type_approval
  343. ])->whereIn('id', $action_data)
  344. ->field('id,process_id,order_process,status_name')
  345. ->cursor();
  346. foreach ($action as $item) {
  347. if (isset($data[$item->process_id])) $data[$item->process_id]['child'][] = $item->toArray();
  348. }
  349. return app_show(0, '请求成功', array_column($data, null, null));
  350. }
  351. }