love_php/app/Http/Controllers/Admin/RbacController.php
2026-04-02 09:20:51 +08:00

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);
}
}