| | |
| | | |
| | | return content; |
| | | } |
| | | public WebResponseContent GetCurrentTreePermissionPDA() |
| | | { |
| | | WebResponseContent content = GetCurrentUserTreePermissionPDA(); |
| | | int roleId = App.User.RoleId; |
| | | return WebResponseContent.Instance.OK(null, new |
| | | { |
| | | tree = content.Data, |
| | | roles = GetAllChildren(roleId) |
| | | }); |
| | | } |
| | | public WebResponseContent GetCurrentUserTreePermissionPDA() |
| | | { |
| | | return GetUserTreePermissionPDA(App.User.RoleId); |
| | | } |
| | | public WebResponseContent GetUserTreePermissionPDA(int roleId) |
| | | { |
| | | if (!App.User.IsRoleIdSuperAdmin(roleId) && App.User.RoleId != roleId) |
| | | { |
| | | if (!(GetAllChildren(App.User.RoleId)).Exists(x => x.Id == roleId)) |
| | | { |
| | | return WebResponseContent.Instance.Error("没有权限获取此角色的权限信息"); |
| | | } |
| | | } |
| | | //获取用户权限 |
| | | List<Permissions> permissions = _MenuRepository.GetPermissions(roleId); |
| | | //权限用户权限查询所有的菜单信息 |
| | | List<MenuDTO> menus = _MenuService.GetUserMenuListPDA(roleId); |
| | | |
| | | //获取当前用户权限如:(Add,Search)对应的显示文本信息如:Add:添加,Search:查询 |
| | | var data = menus.Where(x => x.MenuType == 1).Select(x => new |
| | | { |
| | | Id = x.MenuId, |
| | | Pid = x.ParentId, |
| | | Text = x.MenuName, |
| | | IsApp = x.MenuType == 1, |
| | | Actions = _MenuService.GetActions(x.MenuId, x.Actions, permissions, roleId) |
| | | }); |
| | | return WebResponseContent.Instance.OK(null, data); |
| | | } |
| | | /// <summary> |
| | | /// 保存角色权限 |
| | | /// </summary> |
| | | /// <param name="userPermissions"></param> |
| | | /// <param name="roleId"></param> |
| | | /// <returns></returns> |
| | | public WebResponseContent SavePermissionPDA(List<UserPermissionDTO> userPermissions, int roleId) |
| | | { |
| | | WebResponseContent content = new WebResponseContent(); |
| | | string message = ""; |
| | | try |
| | | { |
| | | if (!GetAllChildren(App.User.RoleId).Exists(x => x.Id == roleId)) |
| | | return WebResponseContent.Instance.Error("没有权限修改此角色的权限信息"); |
| | | //当前用户的权限 |
| | | List<Permissions> permissions = _MenuRepository.GetPermissions(App.User.RoleId); |
| | | |
| | | List<int> originalMeunIds = new List<int>(); |
| | | |
| | | List<int> menuIds = _MenuRepository.QueryData(x => x.MenuId, x => x.MenuType == 1); |
| | | |
| | | //被分配角色的权限 |
| | | List<Sys_RoleAuth> roleAuths = _RoleAuthRepository.QueryData(x => x.RoleId == roleId && menuIds.Contains(x.MenuId)); |
| | | List<Sys_RoleAuth> updateAuths = new List<Sys_RoleAuth>(); |
| | | foreach (UserPermissionDTO x in userPermissions) |
| | | { |
| | | Permissions per = permissions.FirstOrDefault(p => p.MenuId == x.Id); |
| | | //不能分配超过当前用户的权限 |
| | | if (per == null) continue; |
| | | //per.UserAuthArr.Contains(a.Value)校验权限范围 |
| | | string[] arr = x.Actions == null || x.Actions.Count == 0 |
| | | ? new string[0] |
| | | : x.Actions.Where(a => per.UserAuthArr.Contains(a.Value)) |
| | | .Select(s => s.Value).ToArray(); |
| | | |
| | | //如果当前权限没有分配过,设置Auth_Id默认为0,表示新增的权限 |
| | | var auth = roleAuths.Where(r => r.MenuId == x.Id).Select(s => new { s.AuthId, s.AuthValue, s.MenuId }).FirstOrDefault(); |
| | | string newAuthValue = string.Join(",", arr); |
| | | //权限没有发生变化则不处理 |
| | | if (auth == null || auth.AuthValue != newAuthValue) |
| | | { |
| | | updateAuths.Add(new Sys_RoleAuth() |
| | | { |
| | | RoleId = roleId, |
| | | MenuId = x.Id, |
| | | AuthValue = string.Join(",", arr), |
| | | AuthId = auth == null ? 0 : auth.AuthId, |
| | | ModifyDate = DateTime.Now, |
| | | Modifier = App.User.UserName, |
| | | CreateDate = DateTime.Now, |
| | | Creater = App.User.UserName |
| | | }); |
| | | } |
| | | else |
| | | { |
| | | originalMeunIds.Add(auth.MenuId); |
| | | } |
| | | |
| | | } |
| | | //更新权限 |
| | | _RoleAuthRepository.UpdateData(updateAuths); |
| | | //新增的权限 |
| | | _RoleAuthRepository.AddData(updateAuths); |
| | | |
| | | //获取权限取消的权限 |
| | | int[] authIds = roleAuths.Where(x => userPermissions.Select(u => u.Id) |
| | | .ToList().Contains(x.MenuId) || originalMeunIds.Contains(x.MenuId)) |
| | | .Select(s => s.AuthId) |
| | | .ToArray(); |
| | | List<Sys_RoleAuth> delAuths = roleAuths.Where(x => x.AuthValue != "" && !authIds.Contains(x.AuthId)).ToList(); |
| | | delAuths.ForEach(x => |
| | | { |
| | | x.AuthValue = ""; |
| | | }); |
| | | //将取消的权限设置为"" |
| | | _RoleAuthRepository.DeleteData(delAuths); |
| | | |
| | | int addCount = updateAuths.Where(x => x.AuthId <= 0).Count(); |
| | | int updateCount = updateAuths.Where(x => x.AuthId > 0).Count(); |
| | | |
| | | string _version = DateTime.Now.ToString("yyyyMMddHHMMssfff"); |
| | | |
| | | |
| | | content.OK($"保存成功:新增加配菜单权限{addCount}条,更新菜单{updateCount}条,删除权限{delAuths.Count}条"); |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | message = "异常信息:" + ex.Message + ex.StackTrace + ","; |
| | | } |
| | | |
| | | return content; |
| | | } |
| | | } |
| | | } |