diff --git a/Infrastructure/OptionsSetting.cs b/Infrastructure/OptionsSetting.cs index 1698580..4f7a9dc 100644 --- a/Infrastructure/OptionsSetting.cs +++ b/Infrastructure/OptionsSetting.cs @@ -1,4 +1,6 @@  +using System.Collections.Generic; + namespace Infrastructure { /// @@ -15,6 +17,7 @@ namespace Infrastructure public ALIYUN_OSS ALIYUN_OSS { get; set; } public JwtSettings JwtSettings { get; set; } public Gen Gen { get; set; } + public List DbConfigs { get; set; } } /// /// 发送邮件数据配置 @@ -81,4 +84,11 @@ namespace Infrastructure } + public class DbConfigs + { + public string Conn { get; set; } + public int DbType { get; set; } + public string ConfigId { get; set; } + public bool IsAutoCloseConnection { get; set; } + } } diff --git a/ZR.Admin.WebApi/Controllers/System/SysProfileController.cs b/ZR.Admin.WebApi/Controllers/System/SysProfileController.cs index c68be2d..875538b 100644 --- a/ZR.Admin.WebApi/Controllers/System/SysProfileController.cs +++ b/ZR.Admin.WebApi/Controllers/System/SysProfileController.cs @@ -3,12 +3,7 @@ using Infrastructure.Attribute; using Infrastructure.Enums; using Infrastructure.Model; using Mapster; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; -using Microsoft.Extensions.Options; -using System; -using System.Threading.Tasks; using ZR.Admin.WebApi.Extensions; using ZR.Admin.WebApi.Filters; using ZR.Model.System; diff --git a/ZR.Admin.WebApi/Extensions/DbExtension.cs b/ZR.Admin.WebApi/Extensions/DbExtension.cs index 1e2d7d6..006375f 100644 --- a/ZR.Admin.WebApi/Extensions/DbExtension.cs +++ b/ZR.Admin.WebApi/Extensions/DbExtension.cs @@ -22,31 +22,36 @@ namespace ZR.Admin.WebApi.Extensions //仅本人数据权限 public static long DATA_SCOPE_SELF = 5; + /// + /// 初始化db + /// + /// public static void AddDb(IConfiguration Configuration) { - string connStr = Configuration.GetConnectionString("conn_db"); - int dbType = Convert.ToInt32(Configuration.GetConnectionString("conn_db_type")); + List dbConfigs = Configuration.GetSection("DbConfigs").Get>(); - var iocList = new List() { - new IocConfig() { - ConfigId = "0",//默认db - ConnectionString = connStr, - DbType = (IocDbType)dbType, - IsAutoCloseConnection = true - }, - new IocConfig() { - ConfigId = "1", - ConnectionString = connStr, - DbType = (IocDbType)dbType, - IsAutoCloseConnection = true - } - }; + var iocList = new List(); + foreach (var item in dbConfigs) + { + iocList.Add(new IocConfig() + { + ConfigId = item.ConfigId, + ConnectionString = item.Conn, + DbType = (IocDbType)item.DbType, + IsAutoCloseConnection = item.IsAutoCloseConnection + }); + } SugarIocServices.AddSqlSugar(iocList); ICacheService cache = new SqlSugarCache(); SugarIocServices.ConfigurationSugar(db => { - //db0数据过滤 - FilterData(0); + var u = App.User; + if (u != null) + { + FilterData(0); + //ConfigId = 1的数据权限过滤 + //FilterData1(1); + } iocList.ForEach(iocConfig => { @@ -55,6 +60,12 @@ namespace ZR.Admin.WebApi.Extensions }); } + /// + /// 数据库Aop设置 + /// + /// + /// + /// private static void SetSugarAop(SqlSugarClient db, IocConfig iocConfig, ICacheService cache) { var config = db.GetConnection(iocConfig.ConfigId).CurrentConnectionConfig; @@ -108,7 +119,7 @@ namespace ZR.Admin.WebApi.Extensions } /// - /// 初始化db + /// 创建db、表 /// /// public static void InitDb(this IServiceProvider service) @@ -137,8 +148,6 @@ namespace ZR.Admin.WebApi.Extensions /// 多库id private static void FilterData(int configId) { - var u = App.User; - if (u == null) return; //获取当前用户的信息 var user = JwtUtil.GetLoginUser(App.HttpContext); if (user == null) return; @@ -159,7 +168,7 @@ namespace ZR.Admin.WebApi.Extensions else if (DATA_SCOPE_CUSTOM.Equals(dataScope))//自定数据权限 { //" OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias, role.getRoleId())); - + expUser.Or(it => SqlFunc.Subqueryable().Where(f => f.DeptId == it.DeptId && f.RoleId == role.RoleId).Any()); } else if (DATA_SCOPE_DEPT.Equals(dataScope))//本部门数据 @@ -184,5 +193,35 @@ namespace ZR.Admin.WebApi.Extensions db.QueryFilter.AddTableFilter(expLoginlog.ToExpression()); } } + + private static void FilterData1(int configId) + { + //获取当前用户的信息 + var user = JwtUtil.GetLoginUser(App.HttpContext); + if (user == null) return; + var db = DbScoped.SugarScope.GetConnectionScope(configId); + + foreach (var role in user.Roles.OrderBy(f => f.DataScope)) + { + long dataScope = role.DataScope; + if (DATA_SCOPE_ALL.Equals(dataScope))//所有权限 + { + break; + } + else if (DATA_SCOPE_CUSTOM.Equals(dataScope))//自定数据权限 + { + } + else if (DATA_SCOPE_DEPT.Equals(dataScope))//本部门数据 + { + } + else if (DATA_SCOPE_DEPT_AND_CHILD.Equals(dataScope))//本部门及以下数据 + { + + } + else if (DATA_SCOPE_SELF.Equals(dataScope))//仅本人数据 + { + } + } + } } } diff --git a/ZR.Admin.WebApi/Extensions/TasksExtension.cs b/ZR.Admin.WebApi/Extensions/TasksExtension.cs index e39c620..8f890cc 100644 --- a/ZR.Admin.WebApi/Extensions/TasksExtension.cs +++ b/ZR.Admin.WebApi/Extensions/TasksExtension.cs @@ -1,8 +1,4 @@ -using Infrastructure; -using Microsoft.AspNetCore.Builder; -using Microsoft.Extensions.DependencyInjection; -using Quartz.Spi; -using System; +using Quartz.Spi; using ZR.Tasks; namespace ZR.Admin.WebApi.Extensions @@ -12,6 +8,11 @@ namespace ZR.Admin.WebApi.Extensions /// public static class TasksExtension { + /// + /// 注册任务 + /// + /// + /// public static void AddTaskSchedulers(this IServiceCollection services) { if (services == null) throw new ArgumentNullException(nameof(services)); diff --git a/ZR.Admin.WebApi/appsettings.json b/ZR.Admin.WebApi/appsettings.json index ee9155d..5fbd07b 100644 --- a/ZR.Admin.WebApi/appsettings.json +++ b/ZR.Admin.WebApi/appsettings.json @@ -6,10 +6,15 @@ "Microsoft.Hosting.Lifetime": "Information" } }, - "ConnectionStrings": { - "conn_db": "Data Source=LAPTOP-STKF2M8H\\SQLEXPRESS;User ID=admin;Password=admin123;Initial Catalog=ZrAdmin;", //其他连接字符串请看官方文档 - "conn_db_type": "1" //数据库类型 MySql = 0, SqlServer = 1, Oracle = 3,PgSql = 4 - }, + "dbConfigs": [ + { + "Conn": "Data Source=LAPTOP-STKF2M8H\\SQLEXPRESS;User ID=admin;Password=admin123;Initial Catalog=ZrAdmin;", + "DbType": 1, //数据库类型 MySql = 0, SqlServer = 1, Oracle = 3,PgSql = 4 + "ConfigId": "0", //多租户唯一标识 + "IsAutoCloseConnection": true + } + //...下面添加更多的数据库源 + ], "urls": "http://localhost:8888", //项目启动url,如果改动端口前端对应devServer也需要进行修改 "corsUrls": "http://localhost:8887", //跨域地址(前端启动项目,前后端分离单独部署需要设置),多个用","隔开 "JwtSettings": { @@ -18,7 +23,7 @@ "SecretKey": "SecretKey-ZRADMIN.NET-20210101", "Expire": 1440 //jwt登录过期时间(分) }, - "InjectClass": [ "ZR.Repository", "ZR.Service", "ZR.Tasks" ],//自动注入类 + "InjectClass": [ "ZR.Repository", "ZR.Service", "ZR.Tasks" ], //自动注入类 "InitDb": false, //是否初始化db "DemoMode": false, //是否演示模式 "Upload": { @@ -43,6 +48,7 @@ "CorpSecret": "", "SendUser": "@all" }, + //代码生成配置 "gen": { "conn": "Data Source=LAPTOP-STKF2M8H\\SQLEXPRESS;User ID=admin;Password=admin123;Initial Catalog=ZrAdmin;", "dbType": 1, //MySql = 0, SqlServer = 1 diff --git a/ZR.Repository/BaseRepository.cs b/ZR.Repository/BaseRepository.cs index bba484f..30a4a4b 100644 --- a/ZR.Repository/BaseRepository.cs +++ b/ZR.Repository/BaseRepository.cs @@ -168,6 +168,7 @@ namespace ZR.Repository { return Context.Storageable(t); } + /// /// /// @@ -189,6 +190,11 @@ namespace ZR.Repository } } + /// + /// 使用事务 + /// + /// + /// public bool UseTran2(Action action) { var result = Context.Ado.UseTran(() => action()); diff --git a/ZR.Service/System/SysUserService.cs b/ZR.Service/System/SysUserService.cs index c8d8175..47b900a 100644 --- a/ZR.Service/System/SysUserService.cs +++ b/ZR.Service/System/SysUserService.cs @@ -217,6 +217,10 @@ namespace ZR.Service { throw new CustomException("密码强度不符合要求"); } + if (!Tools.CheckUserName(dto.Username)) + { + throw new CustomException("用户名不符合要求"); + } //密码md5 string password = NETCore.Encrypt.EncryptProvider.Md5(dto.Password);