角色表结构如下:
权限表结构如下:
角色控制器代码:
/** * 角色列表 【模糊查询、分页】 * @param Request $request * @return \Illuminate\Http\JsonResponse */ public function index(Request $request) { //获取角色名称、当前页数和每页显示条数 $data = $request->input(); $roleName = emptyParam($data,'role_name'); $pageName = emptyParam($data,'pagename',1); $pageSize = emptyParam($data,'pagesezi',10); $where = []; if (!empty($roleName)){ $where[] = ["role_name", "like", "%" . $roleName . "%"]; } $result = ManageRoleModel::query()->where($where)->paginate($pageSize,['role_name','created_at'],'',$pageName)->toArray(); foreach ($result['data'] as &$v){ $v['created_at'] = date("Y-m-d",strtotime($v['created_at'])); } return $this->success($result['data'],'查询成功'); } /** * 添加角色 * @param RoleRequest $request * @return \Illuminate\Http\JsonResponse */ public function create(RoleRequest $request){ $manage = [ "role_name" => $request->role_name, "created_at" => date("Y-m-d H:i:s") ]; $role = ManageRoleModel::query()->create($manage); if ($role){ return $this->success($role, "角色新增成功"); }else{ return $this->failed("角色新增失败"); } } /** * 角色修改 * @param RoleRequest $request * @return \Illuminate\Http\JsonResponse */ public function edit(RoleRequest $request){ if (empty($request['id']) || !is_numeric($request['id'])){ return $this->failed("非法传参"); } $roleInfo = [ 'id' => $request->id, 'role_name' => $request->role_name, 'created_at' => date("Y-m-d H:i:s"), ]; $edit = ManageRoleModel::query()->where(['id' => $request->id])->update($roleInfo); if ($edit){ return $this->success($edit, "角色修改成功"); }else{ return $this->failed("角色修改失败"); } } /** * 删除角色 * @param CheckIdRequest $request * @return \Illuminate\Http\JsonResponse */ public function del(CheckIdRequest $request){ $id = $request->id; if (ManageRoleModel::query()->where(['id' => $id])->delete()){ return $this->success([], "删除成功"); }else{ return $this->failed("删除失败"); } } //给用户赋权 public function addPermission(ManageRolePermission $request) { $permissionInfo = [ 'id' => $request['id'], 'permission_id' => $request['permission_id'], 'updated_at' => date("Y-m-d H:i:s") ]; // dd($permissionInfo); $addPermission = ManageRoleModel::query()->where('id',$request['id'])->update($permissionInfo); if ($addPermission){ return $this->success($addPermission,'添加权限成功'); }else{ return $this->failed('添加权限失败'); } }
————————————————————————————————————————————————————————————————————————————————————
权限控制器代码:
//递归查询权限列表 public function index(){ $data = ManagePermissionModel::query()->get()->toArray(); $array = $this->recursion($data, $pid = 0); return $this->success($array); } /*** * 获取取全树 */ public function navList(){ $operationModel = new ManagePermissionModel(); $query = $operationModel->where('type','<>','a')->orderBy('sort', 'asc')->get()->toArray(); $tree = PHPTree::makeTreeForHtml($query,array( 'parent_key' => 'pid', 'primary_name' => 'name', 'primary_code' => 'code', )); return $this->success($tree); } public function menus(){ $operationModel = new ManagePermissionModel(); $menus = $operationModel->where('perm_type','<',3)->orderBy('sort', 'asc')->get()->toArray(); $r = PHPTree::makeTreeForHtml($menus,array( 'parent_key' => 'pid', 'primary_name' => 'name', 'primary_code' => 'code', )); return $this->success($r); } /** * 创建栏目 * @param OperationRequest $request */ public function create(OperationRequest $request){ $operation = [ 'permission_name' => $request->permission_name, 'address' => $request->address, 'type' => $request->type, 'pid' => $request->pid, 'parent_menu_id' => $request->parent_menu_id, 'perm_type' => $request->perm_type, 'sort' => $request->sort, ]; $addPermission = ManagePermissionModel::query()->create($operation); if ($addPermission){ return $this->success($addPermission, "创建成功"); } else { return $this->failed("创建失败"); } } public function del(CheckIdRequest $request){ $id = $request->id; $del = ManagePermissionModel::query()->where(['id' => $id])->delete(); if ($del){ return $this->success($del, "删除成功"); }else{ return $this->failed("删除失败"); } } public function edit(OperationRequest $request){ if (empty($request['id']) || !is_numeric($request['id'])){ return $this->failed("非法传参"); } $operation = [ 'permission_name' => $request->permission_name, 'address' => $request->address, 'type' => $request->type, 'pid' => $request->pid, 'parent_menu_id' => $request->parent_menu_id, 'id' => $request->id, 'perm_type' => $request->perm_type, 'sort' => $request->sort, ]; $edit = ManagePermissionModel::query()->where(['id' => $operation['id']])->update($operation); if ($edit){ return $this->success($edit, "修改成功"); } else { return $this->failed("修改失败"); } }
权限模型层代码:
/** * 根据传过来的数组,构建以parent_menu_id为父节点的菜单树.. * @param $list 构建树所需要的节点,此值是根据权限节点算出来的 * @param $parent_menu_id 构建树的根节点 * @return array */ public function createTree($list,$parent_menu_id){ $data = []; foreach($list as $k => $v){ if($v['parent_menu_id'] == $parent_menu_id){ $row = $v; //取当前节点的url // $row['url'] = $this->getUrl($v['id']); $row['children'] = $this->createTree($list,$v['id']); $data[] = $row; } } return $data; } /** * 根据当前节点,取出当前节点的url,用于后台菜单节点的url生成 * @param $operation_id * @param $list */ private function getUrl($operation_id){ static $list = []; if(!$list){ $all = ManagePermissionModel::query()->get(); if(!$all->isEmpty()){ $all = $all->toArray(); }else{ $all = []; } foreach($all as $v){ $list[$v['id']] = $v; } } if(!isset($list[$operation_id])){ return ""; } if($list[$operation_id]['type'] == 'm'){ return url($list[$operation_id]['code'] . '/index/index'); //一个模型,搞什么url? } if($list[$operation_id]['type'] == 'c'){ if(isset($list[$list[$operation_id]['pid']])){ return url($list[$list[$operation_id]['pid']]['code'] . '/'.$list[$operation_id]['code'].'/index'); }else{ return ""; } } if($list[$operation_id]['type'] == 'a'){ //取控制器 if(isset($list[$list[$operation_id]['pid']]) && isset($list[$list[$list[$operation_id]['pid']]['pid']])){ return url($list[$list[$list[$operation_id]['pid']]['pid']]['code'] . '/'.$list[$list[$operation_id]['pid']]['code'].'/'.$list[$operation_id]['code']); }else{ return ""; } } return ""; }
在Laravel框架配置里封装:
配置目录:
封装代码:
/** * 根据父级id查找子级数据 * @param $data 要查询的数据 * @param int $pid 父级id */ public function recursion($data, $pid = 0) { // 定义存储子级数据数组 $child = []; foreach ($data as $key => $value) { if ($value['pid'] == $pid) { // 使用过后可以销毁 unset($data[$key]); // 递归调用,查找当前数据的子级 $value['child'] = $this->recursion($data, $value['id']); // 把子级数据添加进数组 $child[] = $value; } } return $child; }
成功的秘诀,在永不改变既定的目的~