Commit a828185d authored by hangjun83's avatar hangjun83

修复用户权限问题

parent e2b35708
...@@ -268,7 +268,7 @@ class AuthorizationController extends Controller ...@@ -268,7 +268,7 @@ class AuthorizationController extends Controller
{ {
$message = [ $message = [
'type.required' => "菜单类型必选", 'type.required' => "菜单类型必选",
'parentId.required' => "菜单上统计菜单必填", 'parentId.required' => "上级菜单必填",
'level.required' => "菜单深度必填", 'level.required' => "菜单深度必填",
'sort.required' => "菜单排序必填", 'sort.required' => "菜单排序必填",
'status.required' => "菜单状态必选", 'status.required' => "菜单状态必选",
......
...@@ -177,29 +177,18 @@ class AuthService ...@@ -177,29 +177,18 @@ class AuthService
throw new \LogicException('角色不存在'); throw new \LogicException('角色不存在');
} }
//判断当前用户是否有相应的角色权限
//如果有,先取消。然后在进行新的角色权限分配
$belongRoles = $user->roles; $belongRoles = $user->roles;
//角色 //角色
if(count($belongRoles->toArray()) > 0){ if(count($belongRoles->toArray()) > 0){
collect($belongRoles)->map(function($role) use ($user){ $this->removeUserRoleAndPermission($user, $roles);
$user->removeRole($role);
$permissions = $role->permissions;
collect($permissions)->map(function($permission) use ($role){
$role->revokePermissionTo($permission);
});
});
} }
collect($roles)->map(function($role) use ($user){ $this->authroizeUserRoleAndPermission($user, $roles);
$user->assignRole($role);
/*echo "<pre>";
print_R($role->permissions->toArray());
exit;*/
});
}else{ }else{
$roles = $user->roles; $roles = $user->roles;
if(count($roles->toArray()) > 0){ if(count($roles->toArray()) > 0){
collect($roles)->map(function($role) use ($user){ $this->removeUserRoleAndPermission($user,$roles);
$user->removeRole($role);
});
} }
} }
} }
...@@ -207,6 +196,38 @@ class AuthService ...@@ -207,6 +196,38 @@ class AuthService
return true; return true;
} }
/**
* 移除当前用户所在的角色及角色权限
* @param $user
* @param $roles
*/
public function removeUserRoleAndPermission($user,$roles)
{
collect($roles)->map(function($role) use ($user){
$permissions = $role->permissions;
$user->removeRole($role);
collect($permissions)->map(function($permission) use ($user){
$user->revokePermissionTo($permission);
});
});
}
/**
* 授权当前用户所在的角色及角色权限
* @param $user
* @param $roles
*/
public function authroizeUserRoleAndPermission($user, $roles)
{
collect($roles)->map(function($role) use ($user){
$user->assignRole($role);
$permissions = $role->permissions;
collect($permissions)->map(function($permission) use ($user){
$user->givePermissionTo($permission);
});
});
}
/** /**
* 更新用户状态 * 更新用户状态
* @param $request * @param $request
......
...@@ -48,6 +48,12 @@ class RoleAndPermissionsService ...@@ -48,6 +48,12 @@ class RoleAndPermissionsService
$role = $this->getAllPermissions($this->user); $role = $this->getAllPermissions($this->user);
} }
/**
* 获取用户所有权限
* @param $user
* @param bool $parseUserRole
* @return mixed
*/
protected function getAllPermissions($user, $parseUserRole = true) protected function getAllPermissions($user, $parseUserRole = true)
{ {
$role = $user->getpermissionsviaroles(); $role = $user->getpermissionsviaroles();
...@@ -358,24 +364,40 @@ class RoleAndPermissionsService ...@@ -358,24 +364,40 @@ class RoleAndPermissionsService
public function deleteMenus($request) public function deleteMenus($request)
{ {
$params = $this->formatKeysfromArray($request->all(),'toUnderScore'); $params = $this->formatKeysfromArray($request->all(),'toUnderScore');
$menuModel = app(Menus::class); $menuModel = app(Menus::class);
$menu_ids = explode(',',$params['ids']); $menu_ids = explode(',',$params['ids']);
if(!$menus = $menuModel->whereIn('id',$menu_ids)->get()){ if(!$menus = $menuModel->whereIn('id',$menu_ids)->get()){
throw new \LogicException('选中的菜单不存在!'); throw new \LogicException('选中的菜单不存在!',500);
} }
//判断该菜单下面是否有其他子菜单 //判断该菜单下面是否有其他子菜单
/*if($parentMenus = $menuModel->whereIn('parent_id',$menu_ids)->get()){ /*if($menuModel->whereIn('parent_id',$menu_ids)->get()){
throw new \LogicException('选中的菜单中有子菜单存在,无法删除该菜单。'); throw new \LogicException('选中的菜单中有子菜单存在,无法删除该菜单。',500);
}*/ }*/
//判断选中的菜单是否已被赋予权限给到用户组 //判断选中的菜单是否已被赋予权限给到用户组
//查询该菜单对应的权限数据 //查询该菜单对应的权限数据
$menuPermission = Permission::query()->has->whereIn('menu_id',$menu_ids)->get(); $menuPermission = Permission::query()->whereIn('menu_id',$menu_ids)->get();
Permission::
if($menuPermission){ if($menuPermission){
$allRole = Role::all(); $allRoles = Role::all();
if($allRole){ if($allRoles){
collect($allRole)->map(function($role) use ($menuPermission){ $hasPermission = false;
$result = $role->permissions(); collect($allRoles)->map(function($role) use ($menuPermission, &$hasPermission){
collect($menuPermission)->map(function($permission) use ($role, &$hasPermission){
if($role->hasPermissionTo($permission)){
$hasPermission = true ;
}
});
});
if($hasPermission){
throw new \LogicException('用户权限中已经包含该菜单权限,请先取消角色中该菜单的权限,在进行删除操作.',500);
}
//删除对应的菜单
collect($menus)->map(function($menu) use ($menuPermission){
$menu->delete();
//删除对应的菜单权限
collect($menuPermission)->map(function($permission){
$permission->delete();
});
}); });
} }
} }
...@@ -418,7 +440,6 @@ class RoleAndPermissionsService ...@@ -418,7 +440,6 @@ class RoleAndPermissionsService
if(!$params['page_size'] || $params['page_size'] == 0){ if(!$params['page_size'] || $params['page_size'] == 0){
$params['page_size'] = 10; $params['page_size'] = 10;
} }
//$record = app(RolesRepository::class)->cursorPaginate($params['page_number'],$params['page_size'],['name,remark']);
$roles = app(RolesRepository::class)->paginate($params['page_size'],['id','name','remark','created_at','updated_at']); $roles = app(RolesRepository::class)->paginate($params['page_size'],['id','name','remark','created_at','updated_at']);
if($roles){ if($roles){
$rolePermission = []; $rolePermission = [];
...@@ -467,7 +488,7 @@ class RoleAndPermissionsService ...@@ -467,7 +488,7 @@ class RoleAndPermissionsService
} }
/** /**
* 保存用户组 * 保存角色
* @param $request * @param $request
* @return bool * @return bool
*/ */
...@@ -545,10 +566,10 @@ class RoleAndPermissionsService ...@@ -545,10 +566,10 @@ class RoleAndPermissionsService
throw new \LogicException('角色不存在'); throw new \LogicException('角色不存在');
} }
collect($roles)->map(function($role){ collect($roles)->map(function($role){
$role->delete();
if(count($role->permissions->toArray()) > 0){ if(count($role->permissions->toArray()) > 0){
$role->revokePermissionTo($role->permissions); $role->revokePermissionTo($role->permissions);
} }
$role->delete();
}); });
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment