Admin.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <?php
  2. /**
  3. * ----------------------------------------------------------------------------
  4. * 行到水穷处,坐看云起时
  5. * 开发软件,找贵阳云起信息科技,官网地址:https://www.56q7.com/
  6. * ----------------------------------------------------------------------------
  7. * Author: 老成
  8. * email:85556713@qq.com
  9. */
  10. declare(strict_types=1);
  11. namespace app\admin\controller\auth;
  12. use app\admin\traits\Actions;
  13. use app\common\controller\Backend;
  14. use app\common\model\AuthGroup;
  15. use app\common\model\Department;
  16. use think\annotation\route\Group;
  17. use think\annotation\route\Route;
  18. use think\facade\Validate;
  19. use app\common\model\Admin as AdminModel;
  20. /**
  21. * 管理员管理
  22. */
  23. #[Group("auth/admin")]
  24. class Admin extends Backend
  25. {
  26. protected $groups;
  27. private $thirdLogin=false;
  28. private $departdata=[];
  29. protected $noNeedRight='third';
  30. use Actions{
  31. add as private _add;
  32. edit as private _edit;
  33. del as private _del;
  34. }
  35. public function _initialize()
  36. {
  37. parent::_initialize();
  38. $this->model=new AdminModel();
  39. $this->groups=AuthGroup::select();
  40. $this->thirdLogin=addons_installed('uniapp') && site_config("uniapp.scan_login");
  41. $this->departdata=Department::getDepartData();
  42. $this->assign('thirdLogin',$this->thirdLogin);
  43. $this->assign('departdata',$this->departdata);
  44. }
  45. #[Route("*","index")]
  46. public function index()
  47. {
  48. if (false === $this->request->isAjax()) {
  49. $this->assign('groupids',$this->auth->groupids);
  50. $this->assign('isSuperAdmin',$this->auth->isSuperAdmin());
  51. return $this->fetch();
  52. }
  53. if($this->request->post('selectpage')){
  54. return $this->selectpage();
  55. }
  56. $where=[];
  57. if(!$this->auth->isSuperAdmin()){
  58. $groupids=$this->auth->getChildrenGroupIds();
  59. $or=[];
  60. foreach ($groupids as $v){
  61. $or[]="FIND_IN_SET({$v},groupids)";
  62. }
  63. $where[]=[implode(' or ',$or)];
  64. }
  65. $depart=(int)$this->filter('depart');
  66. if($depart){
  67. $departids=$this->getChildrenDepartIds($depart);
  68. $departids[]=$depart;
  69. $where[]=['depart_id','in',$departids];
  70. }
  71. $this->relationField=['depart'];
  72. [$where, $order, $limit, $with] = $this->buildparams($where);
  73. $third_ids=[];
  74. $list = $this->model
  75. ->with($with)
  76. ->where($where)
  77. ->order($order)
  78. ->paginate($limit)
  79. ->each(function($res) use (&$third_ids){
  80. $this->formartGroups($res);
  81. if($this->thirdLogin){
  82. $third_ids[]=$res->third_id;
  83. }
  84. });
  85. $rows=$list->items();
  86. if($this->thirdLogin){
  87. $thirds=\app\common\model\Third::where('id','in',$third_ids)->column('id,openname','id');
  88. foreach ($rows as $k=>$v){
  89. $rows[$k]['third']=$thirds[$v['third_id']]??'';
  90. }
  91. }
  92. $result = ['total' => $list->total(), 'rows' => $rows];
  93. return json($result);
  94. }
  95. private function getChildrenDepartIds(int $pid)
  96. {
  97. function getChildren(array $list){
  98. $r=[];
  99. foreach ($list as $v){
  100. $r[]=$v['id'];
  101. if(!empty($v['childlist'])){
  102. $r=array_merge($r,getChildren($v['childlist']));
  103. return $r;
  104. }
  105. }
  106. return $r;
  107. };
  108. foreach ($this->departdata as $v){
  109. if($v['id']==$pid){
  110. return getChildren($v['childlist']);
  111. }
  112. }
  113. return [];
  114. }
  115. #[Route('GET,POST','edit')]
  116. public function edit()
  117. {
  118. $row=$this->model->find($this->request->get('ids'));
  119. $row->groupids=explode(',',$row->groupids);
  120. $groupids=$this->auth->getChildrenGroupIds();
  121. if(!$this->auth->isSuperAdmin()){
  122. foreach ($row->groupids as $v){
  123. if(!in_array($v,$groupids)){
  124. $this->error(__('无权操作'));
  125. }
  126. }
  127. }
  128. if($this->request->isPost()){
  129. $params = $this->request->post("row/a");
  130. $postgroups=$params['groupids'];
  131. if(!$this->auth->isSuperAdmin()){
  132. foreach ($postgroups as $v){
  133. if(!in_array($v,$groupids)){
  134. $this->error(__('无权操作'));
  135. }
  136. }
  137. }
  138. if ($params['password']) {
  139. if (!Validate::is($params['password'], '\S{6,30}')) {
  140. $this->error(__('密码长度不对!'));
  141. }
  142. $params['salt'] = str_rand(4);
  143. $params['password'] = md5(md5($params['password']) . $params['salt']);
  144. } else {
  145. unset($params['password'], $params['salt']);
  146. }
  147. $params['groupids']=implode(',',$postgroups);
  148. if(isset($params['third_id']) && !$params['third_id']){
  149. $params['third_id']=null;
  150. }
  151. $row->save($params);
  152. $this->success();
  153. }else{
  154. $this->assign('row',$row);
  155. $this->assign('groupdata',$this->getGroupData());
  156. return $this->fetch();
  157. }
  158. }
  159. #[Route('GET,POST','add')]
  160. public function add()
  161. {
  162. if($this->request->isPost()){
  163. $groupids=$this->auth->getChildrenGroupIds();
  164. $params = $this->request->post("row/a");
  165. $postgroups=$params['groupids'];
  166. if(!$this->auth->isSuperAdmin()){
  167. foreach ($postgroups as $v){
  168. if(!in_array($v,$groupids)){
  169. $this->error(__('无权操作'));
  170. }
  171. }
  172. }
  173. if (!$params['password']) {
  174. $this->error(__('请输入密码!'));
  175. }
  176. if (!Validate::is($params['password'], '\S{6,30}')) {
  177. $this->error(__('密码长度不对!'));
  178. }
  179. $params['salt'] = str_rand(4);
  180. $params['password'] = md5(md5($params['password']) . $params['salt']);
  181. $params['groupids']=implode(',',$postgroups);
  182. if(isset($params['third_id']) && !$params['third_id']){
  183. $params['third_id']=null;
  184. }
  185. $this->model->save($params);
  186. $this->success();
  187. }else{
  188. $this->assign('groupdata',$this->getGroupData());
  189. return $this->fetch();
  190. }
  191. }
  192. #[Route('GET,POST','del')]
  193. public function del()
  194. {
  195. if(!$this->auth->isSuperAdmin()){
  196. $groupids=$this->auth->getChildrenGroupIds();
  197. $ids = $this->request->param("ids");
  198. $list = $this->model->where('id', 'in', $ids)->select();
  199. foreach ($list as $row){
  200. $row->groupids=explode(',',$row->groupids);
  201. foreach ($row->groupids as $v){
  202. if(!in_array($v,$groupids)){
  203. $this->error(__('无权操作'));
  204. }
  205. }
  206. }
  207. }
  208. return $this->_del();
  209. }
  210. private function getGroupData()
  211. {
  212. $groupids='*';
  213. if(!$this->auth->isSuperAdmin()){
  214. $groupids=$this->auth->getChildrenGroupIds();
  215. foreach ($groupids as $k=>$v){
  216. //去除已经拥有的权限
  217. if(in_array($v,$this->auth->groupids)){
  218. unset($groupids[$k]);
  219. }
  220. }
  221. }
  222. $groupdata=AuthGroup::getGroupListTree($groupids);
  223. return $groupdata;
  224. }
  225. private function formartGroups(&$admin)
  226. {
  227. $groups=$this->groups;
  228. $names=array_column($groups->toArray(),'name','id');
  229. $status=array_column($groups->toArray(),'status','id');
  230. $groupids=$admin->groupids?explode(',',$admin->groupids):[];
  231. foreach($groupids as $k=>$v){
  232. $groupids[$k]=[
  233. 'id'=>$v,
  234. 'status'=>$status[$v],
  235. 'name'=>$names[$v]
  236. ];
  237. }
  238. $admin->groupids=$groupids;
  239. }
  240. }