diff --git a/Blog.Core.Api/Blog.Core.Model.xml b/Blog.Core.Api/Blog.Core.Model.xml index 41ab451..8437e22 100644 --- a/Blog.Core.Api/Blog.Core.Model.xml +++ b/Blog.Core.Api/Blog.Core.Model.xml @@ -4,6 +4,36 @@ Blog.Core.Model + + + 无任何权限 + + + + + 自定义权限 + + + + + 本部门 + + + + + 本部门及以下 + + + + + 仅自己 + + + + + 所有 + + 以下model 来自ids4项目,多库模式,为了调取ids4数据 @@ -651,6 +681,17 @@ 排序 + + + 自定义权限的部门ids + + + + + 权限范围 + -1 无任何权限;1 自定义权限;2 本部门;3 本部门及以下;4 仅自己;9 全部; + + 是否激活 @@ -751,6 +792,11 @@ 状态 + + + 部门 + + 备注 diff --git a/Blog.Core.Api/Blog.Core.xml b/Blog.Core.Api/Blog.Core.xml index add15ba..27a3c81 100644 --- a/Blog.Core.Api/Blog.Core.xml +++ b/Blog.Core.Api/Blog.Core.xml @@ -640,7 +640,7 @@ 用户管理 - + 构造函数 diff --git a/Blog.Core.Api/Controllers/UserController.cs b/Blog.Core.Api/Controllers/UserController.cs index d26146d..9d71302 100644 --- a/Blog.Core.Api/Controllers/UserController.cs +++ b/Blog.Core.Api/Controllers/UserController.cs @@ -29,9 +29,11 @@ namespace Blog.Core.Controllers readonly ISysUserInfoServices _sysUserInfoServices; readonly IUserRoleServices _userRoleServices; readonly IRoleServices _roleServices; + private readonly IDepartmentServices _departmentServices; private readonly IUser _user; private readonly IMapper _mapper; private readonly ILogger _logger; + private string fullName; /// /// 构造函数 @@ -44,13 +46,16 @@ namespace Blog.Core.Controllers /// /// public UserController(IUnitOfWork unitOfWork, ISysUserInfoServices sysUserInfoServices, - IUserRoleServices userRoleServices, IRoleServices roleServices, + IUserRoleServices userRoleServices, + IRoleServices roleServices, + IDepartmentServices departmentServices, IUser user, IMapper mapper, ILogger logger) { _unitOfWork = unitOfWork; _sysUserInfoServices = sysUserInfoServices; _userRoleServices = userRoleServices; _roleServices = roleServices; + _departmentServices = departmentServices; _user = user; _mapper = mapper; _logger = logger; @@ -81,6 +86,7 @@ namespace Blog.Core.Controllers // 这里可以封装到多表查询,此处简单处理 var allUserRoles = await _userRoleServices.Query(d => d.IsDeleted == false); var allRoles = await _roleServices.Query(d => d.IsDeleted == false); + var allDepartments = await _departmentServices.Query(d => d.IsDeleted == false); var sysUserInfos = data.data; foreach (var item in sysUserInfos) @@ -88,6 +94,12 @@ namespace Blog.Core.Controllers var currentUserRoles = allUserRoles.Where(d => d.UserId == item.Id).Select(d => d.RoleId).ToList(); item.RIDs = currentUserRoles; item.RoleNames = allRoles.Where(d => currentUserRoles.Contains(d.Id)).Select(d => d.Name).ToList(); + List dids = new List(); + fullName = ""; + var departmentName = GetFullDepartmentName(allDepartments, item.DepartmentId, dids); + item.DepartmentName = departmentName; + dids.Insert(0, 0); + item.Dids = dids; } data.data = sysUserInfos; @@ -98,6 +110,21 @@ namespace Blog.Core.Controllers } + private string GetFullDepartmentName(List departments, int departmentId, List dids) + { + var departmentModel = departments.FirstOrDefault(d => d.Id == departmentId); + if (departmentModel == null) + { + return fullName; + } + + fullName = $"{departmentModel.Name}/{fullName}"; + dids.Insert(0, departmentModel.Id); + GetFullDepartmentName(departments, departmentModel.Pid, dids); + + return fullName; + } + // GET: api/User/5 [HttpGet("{id}")] [AllowAnonymous] @@ -127,7 +154,7 @@ namespace Blog.Core.Controllers var userinfo = await _sysUserInfoServices.QueryById(tokenModel.Uid); if (userinfo != null) { - data.response = _mapper.Map(userinfo); + data.response = _mapper.Map(userinfo); data.success = true; data.msg = "获取成功"; } diff --git a/Blog.Core.Api/Program.cs b/Blog.Core.Api/Program.cs index 1e55871..f9dda12 100644 --- a/Blog.Core.Api/Program.cs +++ b/Blog.Core.Api/Program.cs @@ -1,4 +1,6 @@ -using Autofac; + +// 以下为asp.net 6.0的写法,如果用5.0,请看Program.five.cs文件 +using Autofac; using Autofac.Extensions.DependencyInjection; using Blog.Core; using Blog.Core.Common; diff --git a/Blog.Core.Api/Program.five.cs b/Blog.Core.Api/Program.five.cs new file mode 100644 index 0000000..900c949 --- /dev/null +++ b/Blog.Core.Api/Program.five.cs @@ -0,0 +1,75 @@ +//using Autofac.Extensions.DependencyInjection; +//using Blog.Core.Extensions.Apollo; +//using Microsoft.AspNetCore.Hosting; +//using Microsoft.Extensions.Configuration; +//using Microsoft.Extensions.Hosting; +//using Microsoft.Extensions.Logging; +//using System; +//using System.IO; + +// 这是asp.net5.0的写法,如果用5.0,请用本文件代码替换Program.cs代码 +//namespace Blog.Core +//{ +// public class Program +// { +// public static void Main(string[] args) +// { +// //初始化默认主机Builder +// Host.CreateDefaultBuilder(args) +// .UseServiceProviderFactory(new AutofacServiceProviderFactory()) +// .ConfigureWebHostDefaults(webBuilder => +// { +// webBuilder +// .UseStartup() +// .ConfigureAppConfiguration((hostingContext, config) => +// { +// config.Sources.Clear(); +// config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: false) +// //.AddJsonFile($"appsettings{ GetAppSettingsConfigName() }json", optional: true, reloadOnChange: false) +// ; +// //接入Apollo配置中心 +// config.AddConfigurationApollo("appsettings.apollo.json"); +// }) +// .UseUrls("http://*:9291") +// .ConfigureLogging((hostingContext, builder) => +// { +// // 1.过滤掉系统默认的一些日志 +// builder.AddFilter("System", LogLevel.Error); +// builder.AddFilter("Microsoft", LogLevel.Error); + +// // 2.也可以在appsettings.json中配置,LogLevel节点 + +// // 3.统一设置 +// builder.SetMinimumLevel(LogLevel.Error); + +// // 默认log4net.confg +// builder.AddLog4Net(Path.Combine(Directory.GetCurrentDirectory(), "Log4net.config")); +// }) +// ; +// }) +// // 生成承载 web 应用程序的 Microsoft.AspNetCore.Hosting.IWebHost。Build是WebHostBuilder最终的目的,将返回一个构造的WebHost,最终生成宿主。 +// .Build() +// // 运行 web 应用程序并阻止调用线程, 直到主机关闭。 +// // ※※※※ 有异常,查看 Log 文件夹下的异常日志 ※※※※ +// .Run(); +// } + + +// /// +// /// 根据环境变量定向配置文件名称 +// /// +// /// +// private static string GetAppSettingsConfigName() +// { +// if (Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") != null +// && Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") != "") +// { +// return $".{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}."; +// } +// else +// { +// return "."; +// } +// } +// } +//} diff --git a/Blog.Core.Model/CustomEnums/AuthorityScopeEnum.cs b/Blog.Core.Model/CustomEnums/AuthorityScopeEnum.cs new file mode 100644 index 0000000..422b2c5 --- /dev/null +++ b/Blog.Core.Model/CustomEnums/AuthorityScopeEnum.cs @@ -0,0 +1,30 @@ +namespace Blog.Core.Model +{ + public enum AuthorityScopeEnum + { + /// + /// 无任何权限 + /// + NONE = -1, + /// + /// 自定义权限 + /// + Custom = 1, + /// + /// 本部门 + /// + MyDepart = 2, + /// + /// 本部门及以下 + /// + MyDepartAndDown = 3, + /// + /// 仅自己 + /// + OnlySelf = 4, + /// + /// 所有 + /// + ALL = 9 + } +} diff --git a/Blog.Core.Model/Models/Role.cs b/Blog.Core.Model/Models/Role.cs index 0d53783..e34ccdd 100644 --- a/Blog.Core.Model/Models/Role.cs +++ b/Blog.Core.Model/Models/Role.cs @@ -46,6 +46,17 @@ namespace Blog.Core.Model.Models /// public int OrderSort { get; set; } /// + /// 自定义权限的部门ids + /// + [SugarColumn(Length = 500, IsNullable = true)] + public string Dids { get; set; } + /// + /// 权限范围 + /// -1 无任何权限;1 自定义权限;2 本部门;3 本部门及以下;4 仅自己;9 全部; + /// + [SugarColumn(IsNullable = true)] + public int AuthorityScope { get; set; } = -1; + /// /// 是否激活 /// public bool Enabled { get; set; } diff --git a/Blog.Core.Model/Models/sysUserInfo.cs b/Blog.Core.Model/Models/sysUserInfo.cs index d8ffeee..5b4b8b8 100644 --- a/Blog.Core.Model/Models/sysUserInfo.cs +++ b/Blog.Core.Model/Models/sysUserInfo.cs @@ -45,6 +45,11 @@ namespace Blog.Core.Model.Models /// public int Status { get; set; } /// + /// 部门 + /// + [SugarColumn(IsNullable = true)] + public int DepartmentId { get; set; } = -1; + /// /// 备注 /// [SugarColumn(Length = 2000, IsNullable = true)] @@ -94,6 +99,10 @@ namespace Blog.Core.Model.Models [SugarColumn(IsIgnore = true)] public List RoleNames { get; set; } + [SugarColumn(IsIgnore = true)] + public List Dids { get; set; } + [SugarColumn(IsIgnore = true)] + public string DepartmentName { get; set; } } } diff --git a/Blog.Core.Model/ViewModels/SysUserInfoDto.cs b/Blog.Core.Model/ViewModels/SysUserInfoDto.cs index 9a9e832..33d8416 100644 --- a/Blog.Core.Model/ViewModels/SysUserInfoDto.cs +++ b/Blog.Core.Model/ViewModels/SysUserInfoDto.cs @@ -9,6 +9,7 @@ namespace Blog.Core.Model.ViewModels public string uLoginPWD { get; set; } public string uRealName { get; set; } public int uStatus { get; set; } + public int DepartmentId { get; set; } public string uRemark { get; set; } public System.DateTime uCreateTime { get; set; } = DateTime.Now; public System.DateTime uUpdateTime { get; set; } = DateTime.Now; @@ -21,5 +22,7 @@ namespace Blog.Core.Model.ViewModels public string addr { get; set; } public bool tdIsDelete { get; set; } public List RoleNames { get; set; } + public List Dids { get; set; } + public string DepartmentName { get; set; } } }