1036 lines
37 KiB
PHP
1036 lines
37 KiB
PHP
<?php
|
|
|
|
|
|
namespace App\Http\Controllers\Admin;
|
|
|
|
use App\Contracts\UserContract;
|
|
use App\Models\Admin;
|
|
use App\Models\Rbac\Role;
|
|
use Illuminate\Support\Facades\Cache;
|
|
use App\Models\Rbac\Menu;
|
|
use App\Models\Rbac\Permission;
|
|
use App\Models\Rbac\RoleUser;
|
|
use App\Models\Rbac\RolePermission;
|
|
use App\Models\Rbac\Route;
|
|
use App\Models\Rbac\UserPermission;
|
|
use App\Models\Rbac\RoleMenu;
|
|
use App\Http\Controllers\Controller;
|
|
use App\Models\User;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\DB;
|
|
use PhpParser\Node\Expr\Empty_;
|
|
use App\Models\CrmRole;
|
|
use App\Http\Response\ResponseJson;
|
|
class RbacController extends Controller
|
|
{
|
|
use ResponseJson;
|
|
protected $userCon;
|
|
public function __construct(UserContract $userCon){
|
|
$this->userCon = $userCon;
|
|
}
|
|
|
|
/**
|
|
* 菜单部分开始
|
|
*/
|
|
|
|
//新增菜单
|
|
public function addMenu(Request $request){
|
|
|
|
if(!$request->title){
|
|
return $this->failure('菜单标题不能为空');
|
|
}
|
|
// if(!$request->icon){
|
|
// return $this->failure('菜单icon不能为空');
|
|
// }
|
|
if(!$request->path){
|
|
return $this->failure('路由不能为空');
|
|
}
|
|
$is_set = Menu::where('path', $request->path)->where('title', $request->title)->count();
|
|
if($is_set){
|
|
return $this->failure('菜单已创建');
|
|
}
|
|
$parent_id = $request->parent_id ?: 0;
|
|
$route_parent_id = $parent_id;
|
|
if($parent_id != 0){
|
|
$grand_father_id = Menu::where('id', $parent_id)->value('parent_id');
|
|
if($grand_father_id != 0){
|
|
$route_parent_id = $grand_father_id;
|
|
}
|
|
}
|
|
$insert = [
|
|
'parent_id' => $parent_id,
|
|
'route_parent_id' => $route_parent_id,
|
|
'order' => $request->order ? $request->order : 0,
|
|
'title' => $request->title,
|
|
'icon' => $request->icon ?: '无',
|
|
'path' => $request->path,
|
|
'menu_path' => $request->menu_path,
|
|
// 'permission' => $request->permission,
|
|
'hide_in_menu' => $request->hideInMenu ?: 0,
|
|
'status' => $request->status ? $request->status : 1,
|
|
'remark' => $request->remark,
|
|
'header' => 'home',
|
|
'is_page' => is_numeric($request->is_page) ? $request->is_page : 0,
|
|
'name' => $request->name,
|
|
'component' => $request->component,
|
|
'cache' => $request->cache ? 1 : 0,
|
|
'redirect' => json_encode($request->redirect),
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'updated_at' => date('Y-m-d H:i:s'),
|
|
];
|
|
$add_role = $request->add_roles;
|
|
$data = [];
|
|
try{
|
|
DB::beginTransaction();
|
|
$menu_id = Menu::insertGetId($insert);
|
|
// if($add_role && is_array($add_role)){
|
|
// foreach ($add_role as $role_id){
|
|
// $is_exist = role::where('id', $role_id)->count();
|
|
// if($is_exist){
|
|
// $me = [];
|
|
// $me['role_id'] = $role_id;
|
|
// $me['menu_id'] = $menu_id;
|
|
// $me['created_at'] = date('Y-m-d H:i:s');
|
|
// $me['updated_at'] = date('Y-m-d H:i:s');
|
|
// array_push($data, $me);
|
|
// }
|
|
// }
|
|
// }
|
|
$me['role_id'] = 2;
|
|
$me['menu_id'] = $menu_id;
|
|
$me['created_at'] = date('Y-m-d H:i:s');
|
|
$me['updated_at'] = date('Y-m-d H:i:s');
|
|
RoleMenu::insert($me);
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){
|
|
\Log::info($e->getMessage());
|
|
DB::rollBack();
|
|
return $this->failure('操作失败');
|
|
}
|
|
}
|
|
|
|
//我的菜单列表
|
|
public function authMenus(Request $request){
|
|
$user_id = auth()->id();
|
|
|
|
$role_id = RoleUser::where('user_id', $user_id)->pluck('role_id')->toArray();
|
|
$menu_id = RoleMenu::whereIn('role_id', $role_id)->pluck('menu_id')->toArray();
|
|
|
|
$menus = Menu::with(['children' => function($query) use ($menu_id){
|
|
$query->whereIn('id', $menu_id);
|
|
}])->whereIn('id', $menu_id)->where('parent_id', 0)->orderBy('order', 'desc')->orderBy('id' ,'asc')->get()->toArray();
|
|
// foreach ($menus as $key => $menu){
|
|
// $menu->expand = true;
|
|
// if(!empty($menu->children)){
|
|
// foreach ($menu->children as $k => $val){
|
|
// if(!in_array($val->id, $menu_id)) {
|
|
// unset($menus["$key"]->children["$k"]);
|
|
//// $menus["$key"]->children = array_merge($menus["$key"]->children);
|
|
// }
|
|
// }
|
|
// }
|
|
// }
|
|
$menus = $this->checkMenu($menus, $menu_id);
|
|
$menus = $this->changeMenu($menus);
|
|
return $this->success('ok', $menus);
|
|
}
|
|
|
|
//检查菜单
|
|
public function checkMenu($menus, $menu_id){
|
|
foreach ($menus as $key => &$menu){
|
|
if(!in_array($menu['id'], $menu_id)) {
|
|
unset($menus["$key"]);
|
|
}
|
|
if(!empty($menu['children'])){
|
|
$menu['children'] = self::checkMenu($menu['children'], $menu_id);
|
|
}
|
|
}
|
|
|
|
// foreach ($menus as $key => &$menu){
|
|
// if($menu['id'] == 96){
|
|
// print_r(array_values($menus));die;
|
|
// }
|
|
// }
|
|
return array_values($menus);
|
|
}
|
|
|
|
//更改菜单,变成前端需要的结构
|
|
public function changeMenu($menus){
|
|
foreach ($menus as &$menu){
|
|
$menu['cache'] = $menu['cache'] ? true :false;
|
|
if(!empty($menu['children'])){
|
|
foreach ($menu['children'] as &$val){
|
|
if($val['is_page']){
|
|
$val['auth'] = ['hidden'];
|
|
}
|
|
unset($val['header']);
|
|
}
|
|
$menu['children'] = self::changeMenu($menu['children']);
|
|
}
|
|
$menu['path']= $menu['menu_path'];
|
|
unset($menu['id'], $menu['parent_id'], $menu['order'], $menu['permission'], $menu['hide_in_menu'], $menu['created_at'], $menu['updated_at'], $menu['status'], $menu['remark'], $menu['name'], $menu['component'], $menu['redirect'], $menu['is_page'], $menu['menu_path']);
|
|
}
|
|
|
|
return $menus;
|
|
}
|
|
|
|
// //菜单下标问题
|
|
// public function format($menus){
|
|
// $menus = $this->object_to_array($menus);
|
|
// print_r($menus);die;
|
|
// }
|
|
// //对象转数组
|
|
// public function object_to_array($obj)
|
|
// {
|
|
// $obj = (array)$obj;
|
|
// foreach ($obj as $k => $v) {
|
|
// if (gettype($v) == 'resource') {
|
|
// return;
|
|
// }
|
|
// if (gettype($v) == 'object' || gettype($v) == 'array') {
|
|
// $obj[$k] = (array)self::object_to_array($v);
|
|
// }
|
|
// }
|
|
//
|
|
// return $obj;
|
|
// }
|
|
|
|
//菜单列表
|
|
public function menus(Request $request){
|
|
|
|
if(!$request->has('parent_id')){
|
|
$menus = Menu::with(['children'=>function($query){
|
|
$query->orderBy('order','desc');
|
|
}])->where('parent_id', 0);
|
|
}else{
|
|
$menus = Menu::with(['children'=>function($query){
|
|
$query->orderBy('order','desc');
|
|
}])->where('parent_id', $request->parent_id);
|
|
}
|
|
if($request->has('keyword') && !empty($request->keyword)){
|
|
$menus = $menus->where('title', 'like', '%'.$request->keyword.'%');
|
|
}
|
|
|
|
$menus = $menus->orderBy('order', 'desc')->orderBy('id', 'asc')->get();
|
|
$menus = $this->changefield($menus);
|
|
return $this->success('ok', $menus);
|
|
}
|
|
|
|
//所有菜单
|
|
public function allMenus(Request $request){
|
|
$menus = Menu::orderBy('id', 'asc');
|
|
if($request->has('parent_id')){
|
|
$menus = Menu::where('parent_id', $request->parent_id);
|
|
}
|
|
if($request->has('keyword') && !empty($request->keyword)){
|
|
$menus = $menus->where('title', 'like', '%'.$request->keyword.'%');
|
|
}
|
|
$menus = $menus->orderBy('id', 'asc')->paginate();
|
|
foreach ($menus as $menu){
|
|
$menu->redirect = json_decode($menu->redirect);
|
|
}
|
|
return $this->success('ok', $menus);
|
|
}
|
|
//更改菜单,变成前端需要的结构
|
|
public function changefield($menus){
|
|
foreach ($menus as $menu){
|
|
$menu->redirect = json_decode($menu->redirect);
|
|
// $menu->path = $menu->menu_path;
|
|
if(!empty($menu->children)){
|
|
$menu->children = self::changefield($menu->children);
|
|
}
|
|
}
|
|
|
|
return $menus;
|
|
}
|
|
|
|
|
|
//菜单详情
|
|
public function menu(Request $request, $menu_id){
|
|
$menu = Menu::with('parent')->find($menu_id);
|
|
$menu->parent_name = !empty($menu->parent) ? $menu->parent->title : '';
|
|
$menu->redirect = json_decode($menu->redirect);
|
|
unset($menu->parent);
|
|
// $menu->path = $menu->menu_path;
|
|
return $this->success('ok', $menu);
|
|
}
|
|
|
|
//删除菜单
|
|
public function deleteMenu(Request $request, $menu_id){
|
|
$id = $request->menu_id;
|
|
try{
|
|
DB::beginTransaction();
|
|
Menu::destroy($id);
|
|
RoleMenu::where('menu_id', $id)->delete();
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){;
|
|
DB::rollBack();
|
|
return $this->failure('删除失败');
|
|
}
|
|
}
|
|
|
|
//修改菜单
|
|
public function updateMenu(Request $request){
|
|
$id = $request->menu_id;
|
|
$menu = Menu::find($id);
|
|
if($request->has('parent_id') && $request->parent_id){
|
|
$menu->parent_id = $request->parent_id;
|
|
}
|
|
if($request->has('title') && $request->title){
|
|
$menu->title = $request->title;
|
|
}
|
|
if($request->has('icon') && $request->icon){
|
|
$menu->icon = $request->icon;
|
|
}
|
|
if($request->has('path') && $request->path){
|
|
$menu->path = $request->path;
|
|
}
|
|
if($request->has('menu_path') && $request->menu_path) {
|
|
$menu->menu_path = $request->menu_path;
|
|
}
|
|
if($request->has('status') && $request->status){
|
|
$menu->status = $request->status;
|
|
}
|
|
if(is_numeric($request->cache)){
|
|
$menu->cache = $request->cache;
|
|
}
|
|
if(is_numeric($request->order)){
|
|
$menu->order = $request->order;
|
|
}
|
|
if(is_numeric($request->is_page)){
|
|
$menu->is_page = $request->is_page;
|
|
}
|
|
if(is_numeric($request->hide_in_menu)){
|
|
$menu->hide_in_menu = $request->hide_in_menu;
|
|
}
|
|
if($request->header){
|
|
$menu->header = $request->header;
|
|
}
|
|
if($request->remark){
|
|
$menu->remark = $request->remark;
|
|
}
|
|
if($request->name){
|
|
$menu->name = $request->name;
|
|
}
|
|
if($request->component){
|
|
$menu->component = $request->component;
|
|
}
|
|
if($request->redirect){
|
|
$menu->redirect = json_encode($request->redirect);
|
|
}
|
|
// $id = $request->menu_id;
|
|
// $add_roles = $request->add_roles;
|
|
// $data = [];
|
|
// if($add_roles && is_array($add_roles)){
|
|
// foreach ($add_roles as $role_id){
|
|
// $role_menu_count = RoleMenu::where('role_id', $role_id)->where('menu_id', $id)->count();
|
|
// if(!$role_menu_count){
|
|
//
|
|
// $me = [];
|
|
// $me['role_id'] = $role_id;
|
|
// $me['menu_id'] = $id;
|
|
// $me['created_at'] = date("Y-m-d H:i:s");
|
|
// $me['updated_at'] = date("Y-m-d H:i:s");
|
|
// array_push($data, $me);
|
|
// }
|
|
// }
|
|
// }
|
|
// $del_roles = $request->del_roles;
|
|
try{
|
|
DB::beginTransaction();
|
|
$menu->save();
|
|
// if($data){
|
|
// RoleMenu::insert($data);
|
|
// }
|
|
// if($del_roles && is_array($del_roles)){
|
|
// RoleMenu::whereIn('role_id', $del_roles)->where('menu_id', $id)->delete();
|
|
// }
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){;
|
|
\Log::info($e->getMessage());
|
|
DB::rollBack();
|
|
return $this->failure('修改失败');
|
|
}
|
|
}
|
|
/**
|
|
* 菜单部分结束
|
|
*/
|
|
|
|
/**
|
|
* 路由部分开始
|
|
*/
|
|
//新增路由
|
|
public function addRoute(Request $request){
|
|
$parent_id = $request->parent_id ?: 0;
|
|
if($request->grade > 2){
|
|
$componen = $request->componen;
|
|
$prefix = substr($componen, strrpos($componen, '/'));
|
|
$parent_id = Menu::where('componen', $prefix)->value('id');
|
|
}
|
|
$insert = [
|
|
'parent_id' => $parent_id,
|
|
'path' => $request->path,
|
|
'meta' => json_encode($request->meta),
|
|
'name' => $request->name,
|
|
'component' => $request->component,
|
|
'redirect' => json_encode($request->redirect),
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'updated_at' => date('Y-m-d H:i:s'),
|
|
];
|
|
// $add_role = $request->add_roles;
|
|
// $data = [];
|
|
try{
|
|
DB::beginTransaction();
|
|
$menu_id = Route::insertGetId($insert);
|
|
// if($add_role && is_array($add_role)){
|
|
// foreach ($add_role as $role_id){
|
|
// $is_exist = role::where('id', $role_id)->count();
|
|
// if($is_exist){
|
|
// $me = [];
|
|
// $me['role_id'] = $role_id;
|
|
// $me['menu_id'] = $menu_id;
|
|
// $me['created_at'] = date('Y-m-d H:i:s');
|
|
// $me['updated_at'] = date('Y-m-d H:i:s');
|
|
// array_push($data, $me);
|
|
// }
|
|
// }
|
|
// }
|
|
// RoleMenu::insert($data);
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){
|
|
\Log::info($e->getMessage());
|
|
DB::rollBack();
|
|
return $this->failure('操作失败');
|
|
}
|
|
}
|
|
|
|
//路由列表
|
|
public function routes(Request $request){
|
|
$user_id = auth()->id();
|
|
$routes = Menu::select('id', 'title', 'parent_id', 'component', 'name', 'path', 'redirect')->with('route')->where('parent_id', 0)->orderBy('id', 'asc')->get();
|
|
$routes = $this->getMeta($routes, $user_id);
|
|
foreach ($routes as $route){
|
|
$route->redirect = json_decode($route->redirect);
|
|
if(!empty($route->meta)){
|
|
$new_arr['auth'] = $route->meta['auth'];
|
|
$route->meta = $new_arr;
|
|
}
|
|
unset($route->route, $route->cache);
|
|
if(!empty($route->children)){
|
|
foreach ($route->children as $val){
|
|
unset($val->route, $val->children, $val->redirect, $val->cache);
|
|
}
|
|
}
|
|
}
|
|
return $this->success('ok', $routes);
|
|
}
|
|
|
|
|
|
public function getMeta($routes, $user_id){
|
|
|
|
foreach ($routes as $route){
|
|
// $role_ids= RoleMenu::where('menu_id', $route->id)->pluck('role_id')->toArray();
|
|
// $auth = Role::whereIn('id', $role_ids)->pluck('name');
|
|
$auth = DB::table('admin_role_menu as arm')
|
|
->rightJoin('admin_roles as ar','arm.role_id','=','ar.id')
|
|
->select('ar.id','ar.name','arm.role_id','arm.menu_id')
|
|
->where('arm.menu_id',$route->id)->distinct('name')->pluck('name');
|
|
$meta['auth'] = $auth;
|
|
// $menu = Menu::where('path', $route->path)->get();
|
|
// $meta['closable'] = !empty($menu->closable) ? true : false;
|
|
$meta['closable'] = false;
|
|
$meta['title'] = $route->title;
|
|
$meta['cache'] = $route->cache ? true : false;
|
|
$route->meta = $meta;
|
|
$route->children = $route->route;
|
|
unset($route->title, $meat, $route->route, $route->id, $route->parent_id, $route->order, $route->icon, $route->hide_in_menu, $route->header, $route->is_page, $route->status, $route->remark, $route->created_at, $route->updated_at, $route->menu_path);
|
|
if(!empty($route->route)){
|
|
$route->children = self::getMeta($route->children, $user_id);
|
|
}
|
|
}
|
|
|
|
return $routes;
|
|
}
|
|
|
|
|
|
//路由json格式化
|
|
public function changeRoute($routes){
|
|
foreach ($routes as $route){
|
|
$route->meta = json_decode($route->meta);
|
|
$route->redirect = json_decode($route->redirect);
|
|
unset($route->id, $route->parent_id, $route->created_at, $route->updated_at, $route->deleted_at);
|
|
if(!empty($route->children)){
|
|
$route->children = self::changeRoute($route->children);
|
|
}
|
|
}
|
|
return $routes;
|
|
}
|
|
|
|
//路由详情
|
|
public function rtoute(Request $request, $route_id){
|
|
$route = Route::find($route_id);
|
|
$route->meta = json_decode($route->meta);
|
|
$route->redirect = json_decode($route->redirect);
|
|
return $this->success('ok', $route);
|
|
}
|
|
/**
|
|
* 路由部分结束
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
* 用户部分开始
|
|
*/
|
|
//管理员基本信息
|
|
// public function admin(Request $request){
|
|
// $id = $request->admin_id;
|
|
// $admin = Admin::with(['user:id,name', 'role:id,name', 'permission:id,name'])->find($id);
|
|
// return $this->success('ok', $admin);
|
|
// }
|
|
|
|
//修改用户权限/角色
|
|
public function updateUserRole(Request $request){
|
|
$admin_id = $request->admin_id;
|
|
$add_roles = $request->add_roles;
|
|
$roles = [];
|
|
if($add_roles && is_array($add_roles)){
|
|
foreach ($add_roles as $role_id){
|
|
$role_user_count = RoleUser::where('role_id', $role_id)->where('user_id', $admin_id)->count();
|
|
if(!$role_user_count){
|
|
|
|
$me = [];
|
|
$me['role_id'] = $role_id;
|
|
$me['user_id'] = $admin_id;
|
|
$me['created_at'] = date("Y-m-d H:i:s");
|
|
$me['updated_at'] = date("Y-m-d H:i:s");
|
|
array_push($roles, $me);
|
|
}
|
|
}
|
|
unset($me);
|
|
}
|
|
$del_roles = $request->del_roles;
|
|
$add_permissions = $request->add_permissions;
|
|
$permissions = [];
|
|
if($add_permissions && is_array($add_permissions)){
|
|
foreach ($add_permissions as $permission_id){
|
|
$user_permission_count = UserPermission::where('permission_id', $permission_id)->where('user_id', $admin_id)->count();
|
|
if(!$user_permission_count){
|
|
|
|
$me = [];
|
|
$me['permission_id'] = $permission_id;
|
|
$me['user_id'] = $admin_id;
|
|
$me['created_at'] = date("Y-m-d H:i:s");
|
|
$me['updated_at'] = date("Y-m-d H:i:s");
|
|
array_push($permissions, $me);
|
|
}
|
|
}
|
|
}
|
|
$del_permissions = $request->del_permissions;
|
|
try{
|
|
DB::beginTransaction();
|
|
if($roles){
|
|
RoleUser::insert($roles);
|
|
}
|
|
if($del_roles && is_array($del_roles)){
|
|
RoleUser::whereIn('role_id', $del_roles)->where('user_id', $admin_id)->delete();
|
|
}
|
|
if($permissions){
|
|
UserPermission::insert($permissions);
|
|
}
|
|
if($del_permissions && is_array($del_permissions)){
|
|
UserPermission::whereIn('permissions_id', $del_permissions)->where('user_id', $admin_id)->delete();
|
|
|
|
}
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){
|
|
DB::rollBack();
|
|
return $this->failure('操作失败');
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* 角色部分开始
|
|
*/
|
|
//新增用户角色
|
|
public function addRole(Request $request){
|
|
$result = Role::where('name', $request->name)->orWhere('slug', $request->slug)->count();
|
|
// if($result){
|
|
// return $this->failure('角色名已存在');
|
|
// }
|
|
$insert = [
|
|
'name' => $request->name,
|
|
'slug' => $request->name,
|
|
'status' => $request->status ? : 1,
|
|
'order' => $request->order ? : 0,
|
|
'remark' => $request->remark,
|
|
'created_at' => date('Y-m-d H:i:s'),
|
|
'updated_at' => date('Y-m-d H:i:s'),
|
|
];
|
|
$menu_id = $request->menu_id;
|
|
$data = [];
|
|
try{
|
|
DB::beginTransaction();
|
|
$role_id = Role::insertGetId($insert);
|
|
if($menu_id && is_array($menu_id)){
|
|
foreach ($menu_id as $val){
|
|
$me = [];
|
|
$me['role_id'] = $role_id;
|
|
$me['menu_id'] = $val;
|
|
$me['created_at'] = date('Y-m-d H:i:s');
|
|
$me['updated_at'] = date('Y-m-d H:i:s');
|
|
array_push($data, $me);
|
|
}
|
|
RoleMenu::insert($data);
|
|
}
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){;
|
|
\Log::info($e->getMessage());
|
|
DB::rollBack();
|
|
return $this->failure('操作失败');
|
|
}
|
|
}
|
|
|
|
//角色列表
|
|
public function roles(Request $request){
|
|
$keyword= $request->keyword;
|
|
$role = Role::where('status', 1);
|
|
if(!empty($keyword)){
|
|
$role = $role->where('name', 'like', '%'.$keyword.'%');
|
|
}
|
|
$role = $role->orderBy('order', 'desc')->get();
|
|
|
|
|
|
return $this->success('ok', $role);
|
|
}
|
|
|
|
|
|
//角色详情
|
|
public function role(Request $request, $role_id){
|
|
$role = Role::find($role_id);
|
|
|
|
//获取菜单
|
|
$menus = Menu::with('children')->where('parent_id', 0)->get();
|
|
$menus = $this->changeRoleMenus($menus, $role_id);
|
|
return $this->success('ok', compact('role', 'menus'));
|
|
}
|
|
|
|
public function changeRoleMenus($menus, $role_id){
|
|
foreach ($menus as $menu){
|
|
if($menu->children){
|
|
foreach ($menu->children as $val){
|
|
$is_set = RoleMenu::where('role_id', $role_id)->where('menu_id', $val->id)->count();
|
|
// $menu->expand = !empty($is_set) ? : false;
|
|
$menu->expand = true;
|
|
if(count($val->children) == 0){
|
|
$val->checked = !empty($is_set)? : false ;
|
|
}
|
|
|
|
}
|
|
$menu->children = self::changeRoleMenus($menu->children, $role_id);
|
|
}
|
|
}
|
|
return $menus;
|
|
}
|
|
|
|
//删除角色
|
|
public function deleteRole(Request $request, $role_id){
|
|
try{
|
|
DB::beginTransaction();
|
|
Role::destroy($role_id);
|
|
RoleMenu::where('role_id', $role_id)->delete();
|
|
RolePermission::where('role_id')->delete();
|
|
RoleUser::where('role_id')->delete();
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){;
|
|
DB::rollBack();
|
|
return $this->failure('删除失败');
|
|
}
|
|
}
|
|
|
|
//修改角色
|
|
public function updateRole(Request $request, $role_id){
|
|
$role = Role::find($role_id);
|
|
if($request->has('name') && $request->name){
|
|
$role->name = $request->name;
|
|
}
|
|
if($request->has('slug') && $request->slug){
|
|
$role->title = $request->slug;
|
|
}
|
|
if($request->has('status') && $request->status){
|
|
$role->status = $request->status;
|
|
}
|
|
if($request->has('order') && $request->order){
|
|
$role->order = $request->order;
|
|
}
|
|
if($request->has('remark') && $request->remark){
|
|
$role->remark = $request->remark;
|
|
}
|
|
|
|
$menu_id = $request->menu_id;
|
|
$data = [];
|
|
if($menu_id && is_array($menu_id)){
|
|
$old_menu_id = RoleMenu::where('role_id', $role_id)->pluck('menu_id')->toArray();
|
|
$add_arr = array_diff($menu_id, $old_menu_id);
|
|
$del_arr = array_diff($old_menu_id, $menu_id);
|
|
if(!empty($add_arr)){
|
|
foreach ($add_arr as $val){
|
|
$me = [];
|
|
$me['role_id'] = $role_id;
|
|
$me['menu_id'] = $val;
|
|
$me['created_at'] = date("Y-m-d H:i:s");
|
|
$me['updated_at'] = date("Y-m-d H:i:s");
|
|
array_push($data, $me);
|
|
}
|
|
}
|
|
}
|
|
$del_permissions = $request->del_roles;
|
|
try{
|
|
DB::beginTransaction();
|
|
$role->save();
|
|
if($data){
|
|
RoleMenu::insert($data);
|
|
}
|
|
if(!empty($del_arr)){
|
|
RoleMenu::whereIn('menu_id', $del_arr)->where('role_id', $role_id)->delete();
|
|
}
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){;
|
|
\Log::info($e->getMessage());
|
|
DB::rollBack();
|
|
return $this->failure('修改失败');
|
|
}
|
|
}
|
|
|
|
//角色包含的用户
|
|
public function roleUsers(Request $request, $role_id){
|
|
$role = Role::find($role_id);
|
|
$users = $role->admin();
|
|
if($request->keyword){
|
|
$users = $users->where('nickname', 'like', '%'.$request->keyword.'%')->orWhere('mobile', 'like', '%'.$request->keyword.'%');
|
|
}
|
|
$users = $users->paginate();
|
|
return $this->success('ok', $users);
|
|
}
|
|
|
|
public function addRoleToUser(Request $request, $role_id){
|
|
$is_set = RoleUser::where('user_id', $request->user_id)->where('role_id', $role_id)->count();
|
|
if(!$is_set){
|
|
$user_role = New RoleUser();
|
|
$user_role->user_id = $request->user_id;
|
|
$user_role->role_id = $role_id;
|
|
$user_role->save();
|
|
//如果是设置动态管理员的话
|
|
if($role_id == 21){
|
|
$insert = [
|
|
[
|
|
'user_id' => $request->user_id,
|
|
'permission_id' => 8,
|
|
'created_at'=>date('Y-m-d H:i:s'),
|
|
'updated_at'=>date('Y-m-d H:i:s'),
|
|
],
|
|
[
|
|
'user_id' => $request->user_id,
|
|
'permission_id' => 9,
|
|
'created_at'=>date('Y-m-d H:i:s'),
|
|
'updated_at'=>date('Y-m-d H:i:s'),
|
|
],
|
|
[
|
|
'user_id' => $request->user_id,
|
|
'permission_id' => 11,
|
|
'created_at'=>date('Y-m-d H:i:s'),
|
|
'updated_at'=>date('Y-m-d H:i:s'),
|
|
],
|
|
[
|
|
'user_id' => $request->user_id,
|
|
'permission_id' => 12,
|
|
'created_at'=>date('Y-m-d H:i:s'),
|
|
'updated_at'=>date('Y-m-d H:i:s'),
|
|
],
|
|
[
|
|
'user_id' => $request->user_id,
|
|
'permission_id' => 7,
|
|
'created_at'=>date('Y-m-d H:i:s'),
|
|
'updated_at'=>date('Y-m-d H:i:s'),
|
|
],
|
|
];
|
|
UserPermission::insert($insert);
|
|
}
|
|
}
|
|
|
|
return $this->success('ok');
|
|
}
|
|
|
|
//移除管理员
|
|
public function removeRoleToUser(Request $request, $role_id){
|
|
$is_set = RoleUser::where('user_id', $request->user_id)->where('role_id', $role_id)->count();
|
|
if($is_set){
|
|
RoleUser::where('user_id', $request->user_id)->where('role_id', $role_id)->delete();
|
|
//APP动态管理员
|
|
if($role_id == 21){
|
|
UserPermission::where('user_id', $request->user_id)->whereIn('permission_id', [7,8,9,11,12])->delete();
|
|
}
|
|
}
|
|
return $this->success('ok');
|
|
}
|
|
/**
|
|
* 角色部分结束
|
|
*/
|
|
|
|
/**
|
|
* 权限部分开始
|
|
*/
|
|
//新增权限
|
|
public function addPermission(Request $request){
|
|
$permission = new Permission();
|
|
$permission->name = $request->name;
|
|
$permission->slug = $request->slug;
|
|
$permission->http_method = $request->http_method;
|
|
$permission->http_path = $request->http_path;
|
|
$permission->save();
|
|
return $this->success('ok');
|
|
|
|
}
|
|
|
|
//权限列表
|
|
public function permissions(Request $request){
|
|
if($request->has('keyword') && !empty($request->keyword)){
|
|
$permissions = Permission::where('name', 'like', '%'.$request->keyword.'%')->orderBy('id', 'asc')->get();
|
|
}else{
|
|
$permissions = Permission::orderBy('id', 'desc')->get();
|
|
}
|
|
|
|
return $this->success('ok', $permissions);
|
|
}
|
|
|
|
|
|
//权限详情
|
|
public function permission(Request $request){
|
|
$permission = Permission::find($request->menu_id);
|
|
return $this->success('ok', $permission);
|
|
}
|
|
|
|
//删除权限
|
|
public function deletePermission(Request $request){
|
|
$id = $request->menu_id;
|
|
try{
|
|
DB::beginTransaction();
|
|
Permission::destroy($id);
|
|
UserPermission::where('permission_id', $id)->delete();
|
|
RolePermission::where('permission_id', $id)->delete();
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){;
|
|
DB::rollBack();
|
|
return $this->failure('删除失败');
|
|
}
|
|
}
|
|
|
|
//修改权限
|
|
public function updatePermission(Request $request){
|
|
$id = $request->permission_id;
|
|
$permission = Permission::find($id);
|
|
if($request->has('name') && $request->name){
|
|
$permission->name = $request->name;
|
|
}
|
|
if($request->has('slug') && $request->slug){
|
|
$permission->slug = $request->slug;
|
|
}
|
|
if($request->has('http_method') && $request->http_method){
|
|
$permission->http_method = $request->http_method;
|
|
}
|
|
if($request->has('http_path') && $request->http_path){
|
|
$permission->http_path = $request->http_path;
|
|
}
|
|
$permission->save();
|
|
return $this->success('ok');
|
|
|
|
}
|
|
|
|
/**
|
|
* 权限部分结束
|
|
*/
|
|
|
|
/**
|
|
* 管理员部分开始
|
|
*/
|
|
public function createAdmin(Request $request){
|
|
try{
|
|
DB::beginTransaction();
|
|
$user = User::where('mobile', $request->mobile)->first();
|
|
if($user){
|
|
$user->is_admin = 1;
|
|
if($request->password){
|
|
$user->password = bcrypt($request->password);
|
|
}
|
|
$user->remark = $request->remark;
|
|
$user->save();
|
|
$admin = Admin::where('user_id', $user->id)->where('type', 'SUPER')->first();
|
|
if(empty($admin)){
|
|
$admin = New Admin();
|
|
$admin->user_id = $user->id;
|
|
$admin->type = 'SUPER';
|
|
$admin->save();
|
|
}
|
|
}else{
|
|
$user = New User();
|
|
$user->mobile = $request->mobile;
|
|
$user->password = bcrypt($request->password);
|
|
$user->name = $request->name;
|
|
$user->email = $request->email ?: $request->mobile.'@ufutx.com';
|
|
$user->type = 'single';
|
|
$user->remark = $request->remark;
|
|
$user->save();
|
|
|
|
$admin = New Admin();
|
|
$admin->user_id = $user->id;
|
|
$admin->type = 'SUPER';
|
|
$admin->save();
|
|
}
|
|
|
|
$has_role = RoleUser::where('user_id', $user->id)->whereIn('role_id', $request->role_id)->count();
|
|
$role_id = $request->role_id;
|
|
if(!$has_role){
|
|
$insert_arr = [];
|
|
$new_arr = [];
|
|
foreach ($role_id as $val){
|
|
$new_arr['user_id'] = $user->id;
|
|
$new_arr['role_id'] = $val;
|
|
$new_arr['created_at'] = date("Y-m-d H:i:s");
|
|
$new_arr['updated_at'] = date("Y-m-d H:i:s");
|
|
$insert_arr[] = $new_arr;
|
|
|
|
if ($val == 44) {
|
|
CrmRole::firstOrCreate(['user_id'=> $user->id, 'type'=>'c_service']);
|
|
}else if ($val == 45) {
|
|
CrmRole::firstOrCreate(['user_id'=> $user->id, 'type'=>'t_service']);
|
|
}else if ($val == 43) {
|
|
CrmRole::firstOrCreate(['user_id'=> $user->id, 'type'=>'admin']);
|
|
}
|
|
}
|
|
}
|
|
if(!empty($insert_arr)){
|
|
RoleUser::insert($insert_arr);
|
|
}
|
|
|
|
$user_permission = New UserPermission();
|
|
$user_permission->user_id = $user->id;
|
|
$user_permission->permission_id = 7;
|
|
$user_permission->save();
|
|
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){
|
|
\Log::info($e->getMessage());
|
|
DB::rollBack();
|
|
return $this->failure('添加失败');
|
|
}
|
|
}
|
|
|
|
//管理员列表
|
|
public function admins(Request $request){
|
|
$admin = User::select('id', 'nickname', 'photo', 'circle_avatar','app_avatar','mobile', 'email', 'created_at', 'remark')->with('role')->has('role');
|
|
if($request->keyword){
|
|
$keyword = $request->keyword;
|
|
$admin = $admin->where(function ($query) use ($keyword){
|
|
$query->where('id', $keyword)->orWhere('nickname', 'like', '%'.$keyword.'%')->orWhere('name', 'like', '%'.$keyword.'%')->orWhere('mobile', 'like', '%'.$keyword."%");
|
|
});
|
|
}
|
|
$admin = $admin->has('admin')->paginate();
|
|
return $this->success('ok', $admin);
|
|
}
|
|
|
|
//管理员详情
|
|
public function admin(Request $request, $admin_id){
|
|
$admin = User::select('id', 'nickname', 'photo', 'mobile', 'email', 'remark')->with('role')->find($admin_id);
|
|
return $this->success('ok', $admin);
|
|
}
|
|
|
|
//修改管理员
|
|
public function updateAdmin(Request $request, $admin_id){
|
|
try{
|
|
DB::beginTransaction();
|
|
$admin = User::find($admin_id);
|
|
$role_id = RoleUser::where('user_id', $admin_id)->pluck('role_id')->toArray();
|
|
if($request->name && $request->name != $admin->name){
|
|
$admin->name = $request->name;
|
|
}
|
|
|
|
if($request->password && bcrypt($request->password) != $admin->name){
|
|
$admin->password = bcrypt($request->password);
|
|
}
|
|
|
|
if($request->mobile && $request->mobile != $admin->mobile){
|
|
$admin->mobile = $request->mobile;
|
|
}
|
|
|
|
if($request->email && $request->email != $admin->email){
|
|
$admin->email = $request->email;
|
|
}
|
|
|
|
if($request->remark && $request->remark != $admin->remark){
|
|
$admin->remark = $request->remark;
|
|
}
|
|
$admin->save();
|
|
if($request->role_id && (array_diff($request->role_id, $role_id) || array_diff($role_id, $request->role_id))){
|
|
RoleUser::where('user_id', $admin_id)->delete();
|
|
|
|
$role_ids = $request->role_id;
|
|
foreach ($role_ids as $val){
|
|
$new_arr['user_id'] = $admin_id;
|
|
$new_arr['role_id'] = $val;
|
|
$new_arr['created_at'] = date("Y-m-d H:i:s");
|
|
$new_arr['updated_at'] = date("Y-m-d H:i:s");
|
|
$insert_arr[] = $new_arr;
|
|
if ($val == 44) {
|
|
CrmRole::firstOrCreate(['user_id'=> $admin_id, 'type'=>'c_service']);
|
|
}else if ($val == 45) {
|
|
CrmRole::firstOrCreate(['user_id'=> $admin_id, 'type'=>'t_service']);
|
|
}else if ($val == 43) {
|
|
CrmRole::firstOrCreate(['user_id'=> $admin_id, 'type'=>'admin']);
|
|
}
|
|
}
|
|
if(!empty($insert_arr)){
|
|
RoleUser::insert($insert_arr);
|
|
}
|
|
|
|
}
|
|
DB::commit();
|
|
return $this->success('ok');
|
|
}catch (\Exception $e){
|
|
$this->getError($e);
|
|
DB::rollBack();
|
|
return $this->failure('修改失败');
|
|
}
|
|
}
|
|
|
|
//删除管理员
|
|
public function deleteAdmin(Request $request, $admin_id){
|
|
$user = User::find($admin_id);
|
|
if(empty($user)){
|
|
return $this->failure('用户不存在');
|
|
}
|
|
$user->is_admin = 0;
|
|
$user->save();
|
|
Admin::where('user_id', $admin_id)->delete();
|
|
return $this->success('ok');
|
|
}
|
|
/**
|
|
* 管理员部分开始
|
|
*/
|
|
public function getPassword(Request $request)
|
|
{
|
|
$password = bcrypt($request->input('password'));
|
|
return $this->success('ok', $password);
|
|
}
|
|
}
|