AuthManager.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  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. $mp = [];
  26. $session = session('userRule');
  27. if ($session){
  28. $mp['company_id'] = $session['company_id'];
  29. $mp['menu_type'] = $session['menu_type'];
  30. if ($session['business_id']){
  31. $mp['business_id'] = $session['business_id'];
  32. }
  33. }
  34. if(!in_array(admin('uid'), explode(',', config('administrator')))){
  35. $mp['type'] = 1;
  36. }
  37. // 查询列表数据
  38. $list = DB::table('auth_group')->where($mp)->select()->paginate(config('page_num',10))->appends(request()->all());
  39. // 分配数据
  40. $this->assign('list',$list);
  41. // 加载模板
  42. return $this->fetch();
  43. }
  44. /**
  45. * 新增
  46. *
  47. * */
  48. public function add(Request $request){
  49. if(request()->isMethod('post')){
  50. // 验证参数
  51. $request->scene('add')->validate();
  52. // 接收参数
  53. $data['title'] = request('title','');
  54. $data['description'] = request('description','');
  55. $session = session('userRule');
  56. if ($session){
  57. $data['company_id'] = $session['company_id'];
  58. $data['menu_type'] = $session['menu_type'];
  59. if ($session['business_id']){
  60. $data['business_id'] = $session['business_id'];
  61. }
  62. }
  63. $data['type'] = 1;
  64. // 返回结果
  65. $result = DB::table('auth_group')->insert($data);
  66. // 如果状态停用
  67. if( !$result ) return json_send(['code'=>'error','msg'=>'添加失败']);
  68. // 结果
  69. return json_send(['code'=>'success','msg'=>'添加成功','action'=>'add']);
  70. }
  71. $this->assign('crumbs','新增');
  72. return $this->fetch();
  73. }
  74. /**
  75. * 编辑
  76. *
  77. * */
  78. public function edit(Request $request){
  79. if(request()->isMethod('post')){
  80. // 验证参数
  81. $request->scene('edit')->validate();
  82. // 接收参数
  83. $id = request('id',0);
  84. $data['title'] = request('title','');
  85. $data['description'] = request('description','');
  86. // 返回结果
  87. $result = DB::table('auth_group')->where(['id'=>$id])->update($data);
  88. // 如果状态停用
  89. if( !$result ) return json_send(['code'=>'error','msg'=>'编辑失败']);
  90. // 结果
  91. return json_send(['code'=>'success','msg'=>'编辑成功','action'=>'edit']);
  92. }
  93. $group = DB::table('auth_group')->find((int)request('id'));
  94. $merge_group = explode(',',config('CUSTOM_GROUP'));
  95. array_push($merge_group,$group['id']);
  96. $this->assign('group',$group);
  97. $this->assign('crumbs','编辑');
  98. return $this->fetch();
  99. }
  100. /**
  101. * 删除
  102. *
  103. * */
  104. public function del(Request $request){
  105. // 验证参数
  106. $request->scene('del')->validate();
  107. // 接收参数
  108. $id = request('id',0);
  109. // 执行删除
  110. $result = DB::table('auth_group')->delete($id);
  111. // 错误告知
  112. if( !$result ) return json_send(['code'=>'error','msg'=>'删除失败']);
  113. // 结果
  114. return json_send(['code'=>'success','msg'=>'删除成功']);
  115. }
  116. /**
  117. * 授权
  118. *
  119. * */
  120. public function access(Request $request){
  121. // 验证参数
  122. $request->scene('del')->validate();
  123. // 如果是post
  124. if(request()->isMethod('post')){
  125. // 接收参数
  126. $data['rules'] = (array) request('rules',[]);
  127. // 权限组Id
  128. $group_id = (int) request('id',0);
  129. // 删除权限
  130. DB::table('auth_rule')->where(['group_id'=>$group_id])->delete();
  131. // 存在权限
  132. if( isset($data['rules']) ){
  133. // 排序
  134. sort($data['rules']);
  135. // 切割
  136. $data['rules'] = implode( ',' , array_unique($data['rules']));
  137. }
  138. // 修改权限
  139. $result = DB::table('auth_group')->where(['id'=>$group_id])->update($data);
  140. // 告知结果
  141. if( !$result ) return json_send(['code'=>'success','msg'=>'权限组修改失败','action'=>'edit']);
  142. // 权限组菜单
  143. $group_menu = DB::table('auth_group')->find($group_id);
  144. // 菜单ID
  145. $menu_id = explode(',', $group_menu['rules']);
  146. // 获得菜单列表
  147. $menu_list = DB::table('menu')->get()->toArray();
  148. // 循环菜单ID
  149. foreach ($menu_id as $v) {
  150. // 循环菜单列表
  151. foreach ($menu_list as $v1) {
  152. // 如果对应的菜单
  153. if( $v == $v1['id'] ){
  154. // 组合菜单权限数据
  155. $m['menu_id'] = $v;
  156. $m['group_id'] = $group_id;
  157. $m['name'] = !empty($v1['url']) ? $v1['url'] : '';
  158. // 写入菜单权限规则表
  159. DB::table('auth_rule')->insert($m);
  160. }
  161. }
  162. }
  163. // 告知结果
  164. return json_send(['code'=>'success','msg'=>'编辑成功','action'=>'edit']);
  165. }
  166. // 接收参数
  167. $id = request('id',0);
  168. // 获取菜单
  169. $menu = DB::table('menu')->orderBy('sort_order')->get()->toArray();
  170. // 获取规则
  171. $rules = DB::table('auth_group')->select('rules')->find($id);
  172. // 树形
  173. $menu = array_sort(list_to_tree($menu,'id','pid','child',0),'module',SORT_ASC);
  174. // 权限菜单
  175. $this->assign('access_menu',$menu);
  176. // 规则
  177. $this->assign('rules',$rules);
  178. // 加载模板
  179. return $this->fetch();
  180. }
  181. /**
  182. * 状态
  183. *
  184. * */
  185. public function set_status(Request $request){
  186. // 验证参数
  187. $request->scene('set_status')->validate();
  188. // 接收参数
  189. $id = request('id',0);
  190. $status = request('status',0);
  191. // 执行删除
  192. $result = DB::table('auth_group')->where(['id'=>$id])->update(['status'=>$status]);
  193. // 错误告知
  194. if( !$result ) return json_send(['code'=>'error','msg'=>'操作失败','path'=>'']);
  195. // 结果
  196. return json_send(['code'=>'success','msg'=>'操作成功','path'=>'']);
  197. }
  198. }
  199. ?>