AuthManager.php 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. <?php namespace App\Http\Controllers\Admin;
  2. use App\Http\Requests\Admin\AuthManager as Request;
  3. use Illuminate\Support\Facades\DB;
  4. /**
  5. * 权限管理
  6. *
  7. * @author 刘相欣
  8. *
  9. */
  10. class AuthManager extends Auth{
  11. /**
  12. * 初始化
  13. *
  14. * */
  15. protected function _initialize(){
  16. parent::_initialize();
  17. $this->assign('breadcrumb1','系统');
  18. $this->assign('breadcrumb2','权限管理');
  19. }
  20. /**
  21. * 初始化
  22. *
  23. * */
  24. public function index(){
  25. // 查询列表数据
  26. $list = DB::table('auth_group')->select()->paginate(config('page_num',10))->appends(request()->all());
  27. // 分配数据
  28. $this->assign('list',$list);
  29. // 加载模板
  30. return $this->fetch();
  31. }
  32. /**
  33. * 新增
  34. *
  35. * */
  36. public function add(Request $request){
  37. if(request()->isMethod('post')){
  38. // 验证参数
  39. $request->scene('add')->validate();
  40. // 接收参数
  41. $data['title'] = request('title','');
  42. $data['description'] = request('description','');
  43. $data['group_pid'] = request('group_pid',0);
  44. // 返回结果
  45. $result = DB::table('auth_group')->insert($data);
  46. // 如果状态停用
  47. if( !$result ) return json_send(['code'=>'error','msg'=>'添加失败']);
  48. // 结果
  49. return json_send(['code'=>'success','msg'=>'添加成功','action'=>'add']);
  50. }
  51. // 查询用户组
  52. $group = DB::table('auth_group')->whereNotIn('id',explode(',',config('CUSTOM_GROUP')))->select(['id','title'])->get()->toArray();
  53. // 错误告知
  54. if( !$group ) $this->error('请先添加用户组');
  55. $this->assign('crumbs','新增');
  56. $this->assign('group',$group);
  57. return $this->fetch();
  58. }
  59. /**
  60. * 编辑
  61. *
  62. * */
  63. public function edit(Request $request){
  64. if(request()->isMethod('post')){
  65. // 验证参数
  66. $request->scene('edit')->validate();
  67. // 接收参数
  68. $id = request('id',0);
  69. $data['title'] = request('title','');
  70. $data['description'] = request('description','');
  71. $data['group_pid'] = request('group_pid',0);
  72. // 返回结果
  73. $result = DB::table('auth_group')->where(['id'=>$id])->update($data);
  74. // 如果状态停用
  75. if( !$result ) return json_send(['code'=>'error','msg'=>'编辑失败']);
  76. // 结果
  77. return json_send(['code'=>'success','msg'=>'编辑成功','action'=>'edit']);
  78. }
  79. $group = DB::table('auth_group')->find((int)request('id'));
  80. $merge_group = explode(',',config('CUSTOM_GROUP'));
  81. array_push($merge_group,$group['id']);
  82. //dd($merge_group);
  83. // 查询用户组
  84. $groups = DB::table('auth_group')->where(['group_pid'=>0])->whereNotIn('id',$merge_group)->select(['id','title'])->get()->toArray();
  85. // 错误告知
  86. if( !$groups ) $this->error('请先添加用户组');
  87. $this->assign('group',$group);
  88. $this->assign('crumbs','编辑');
  89. $this->assign('groups',$groups );
  90. return $this->fetch();
  91. }
  92. /**
  93. * 删除
  94. *
  95. * */
  96. public function del(Request $request){
  97. // 验证参数
  98. $request->scene('del')->validate();
  99. // 接收参数
  100. $id = request('id',0);
  101. // 执行删除
  102. $result = DB::table('auth_group')->delete($id);
  103. // 错误告知
  104. if( !$result ) return json_send(['code'=>'error','msg'=>'删除失败']);
  105. // 结果
  106. return json_send(['code'=>'success','msg'=>'删除成功']);
  107. }
  108. /**
  109. * 授权
  110. *
  111. * */
  112. public function access(Request $request){
  113. // 验证参数
  114. $request->scene('del')->validate();
  115. // 如果是post
  116. if(request()->isMethod('post')){
  117. // 接收参数
  118. $data['rules'] = (array) request('rules',[]);
  119. // 权限组Id
  120. $group_id = (int) request('id',0);
  121. // 删除权限
  122. DB::table('auth_rule')->where(['group_id'=>$group_id])->delete();
  123. // 存在权限
  124. if( isset($data['rules']) ){
  125. // 排序
  126. sort($data['rules']);
  127. // 切割
  128. $data['rules'] = implode( ',' , array_unique($data['rules']));
  129. }
  130. // 修改权限
  131. $result = DB::table('auth_group')->where(['id'=>$group_id])->update($data);
  132. // 告知结果
  133. if( !$result ) return json_send(['code'=>'success','msg'=>'权限组修改失败','action'=>'edit']);
  134. // 权限组菜单
  135. $group_menu = DB::table('auth_group')->find($group_id);
  136. // 菜单ID
  137. $menu_id = explode(',', $group_menu['rules']);
  138. // 获得菜单列表
  139. $menu_list = DB::table('menu')->get()->toArray();
  140. // 循环菜单ID
  141. foreach ($menu_id as $v) {
  142. // 循环菜单列表
  143. foreach ($menu_list as $v1) {
  144. // 如果对应的菜单
  145. if( $v == $v1['id'] ){
  146. // 组合菜单权限数据
  147. $m['menu_id'] = $v;
  148. $m['group_id'] = $group_id;
  149. $m['name'] = !empty($v1['url']) ? $v1['url'] : '';
  150. // 写入菜单权限规则表
  151. DB::table('auth_rule')->insert($m);
  152. }
  153. }
  154. }
  155. // 告知结果
  156. return json_send(['code'=>'success','msg'=>'编辑成功','action'=>'edit']);
  157. }
  158. // 接收参数
  159. $id = request('id',0);
  160. // 获取菜单
  161. $menu = DB::table('menu')->orderBy('sort_order')->get()->toArray();
  162. // 获取规则
  163. $rules = DB::table('auth_group')->select('rules')->find($id);
  164. // 树形
  165. $menu = array_sort(list_to_tree($menu,'id','pid','child',0),'module',SORT_ASC);
  166. // 权限菜单
  167. $this->assign('access_menu',$menu);
  168. // 规则
  169. $this->assign('rules',$rules);
  170. // 加载模板
  171. return $this->fetch();
  172. }
  173. /**
  174. * 状态
  175. *
  176. * */
  177. public function set_status(Request $request){
  178. // 验证参数
  179. $request->scene('set_status')->validate();
  180. // 接收参数
  181. $id = request('id',0);
  182. $status = request('status',0);
  183. // 执行删除
  184. $result = DB::table('auth_group')->where(['id'=>$id])->update(['status'=>$status]);
  185. // 错误告知
  186. if( !$result ) return json_send(['code'=>'error','msg'=>'操作失败','path'=>'']);
  187. // 结果
  188. return json_send(['code'=>'success','msg'=>'操作成功','path'=>'']);
  189. }
  190. }
  191. ?>