AuthManager.php 7.9 KB

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