Role.php 16 KB

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