用十行代码快速创建权限管理系统

2020-07-01

"ConnId": "WMBLOG_MSSQL_1", "DBType": 1, "Enabled": true, "HitRate": 40, "Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_1;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", "ProviderName": "System.Data.SqlClient" }, { "ConnId": "WMBLOG_MSSQL_2", "DBType": 1, "Enabled": true, "HitRate": 30, "Connection": "Data Source=(localdb)\\MSSQLLocalDB;Initial Catalog=WMBLOG_MSSQL_2;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False;ApplicationIntent=ReadWrite;MultiSubnetFailover=False", "ProviderName": "System.Data.SqlClient" }, { "ConnId": "WMBLOG_MYSQL", "DBType": 0, "Enabled": true, "HitRate": 20, "Connection": "Server=localhost; Port=3306;Stmt=; Database=wmblogdb; Uid=root; Pwd=456;" }, { "ConnId": "WMBLOG_ORACLE", "DBType": 3, "Enabled": false, "HitRate": 10, "Connection": "Provider=OraOLEDB.Oracle; Data Source=WMBlogDB; User Id=sss; Password=789;", "OracleConnection_other1": "User ID=sss;Password=789;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.8.65)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME = orcl)))" } ], "Audience": { "Secret": "sdfsdfsrty45634kkhllghtdgdfss345t678fs", //不要太短,16位+ "SecretFile": "C:\\my-file\\blog.core.audience.secret.txt", //安全。内容就是Secret "Issuer": "Blog.Core", "Audience": "wr" }, "Startup": { "Cors": { "IPs": "http://127.0.0.1:2364,http://localhost:2364,http://localhost:8080,http://localhost:8021,http://localhost:1818" }, "AppConfigAlert": { "Enabled": true }, "ApiName": "Blog.Core", "IdentityServer4": { "Enabled": false, // 这里默认是false,表示使用jwt,如果设置为true,则表示系统使用Ids4模式 "AuthorizationUrl": "https://ids.neters.club", // 认证中心域名 "ApiName": "blog.core.api" // 资源服务器 } }, "Middleware": { "RequestResponseLog": { "Enabled": false }, "IPLog": { "Enabled": true }, "RecordAllLogs": { "Enabled": false }, "SignalR": { "Enabled": false }, "QuartzNetJob": { "Enabled": true }, "Consul": { "Enabled": false }, "IpRateLimit": { "Enabled": true } }, "IpRateLimiting": { "EnableEndpointRateLimiting": true, //False: globally executed, true: executed for each "StackBlockedRequests": false, //False: Number of rejections should be recorded on another counter "RealIpHeader": "X-Real-IP", "ClientIdHeader": "X-ClientId", "IpWhitelist": [], //白名单 "EndpointWhitelist": [ "get:/api/xxx", "*:/api/yyy" ], "ClientWhitelist": [ "dev-client-1", "dev-client-2" ], "HttpStatusCode": 429, //返回状态码 "GeneralRules": [ //api规则,结尾一定要带* { "Endpoint": "*:/api/blog*", "Period": "1m", "Limit": 20 }, { "Endpoint": "*/api/*", "Period": "1s", "Limit": 3 }, { "Endpoint": "*/api/*", "Period": "1m", "Limit": 30 }, { "Endpoint": "*/api/*", "Period": "12h", "Limit": 500 } ] }, "ConsulSetting": { "ServiceName": "BlogCoreService", "ServiceIP": "localhost", "ServicePort": "8081", "ServiceHealthCheck": "/healthcheck", "ConsulAddress": "http://localhost:8500" } }

在这里配置好自己的数据库连接字符串即可。

5、注册SqlSugar服务,导入种子数据

先来注册服务:

services.AddBCVPSqlsugarExtensions();

然后配置中间件,导入种子数据:

app.UseBCVPSeedDataMildd(myContext, env.WebRootPath);

这里的参数,都是需要注入的:

public void Configure (IApplicationBuilder app, IWebHostEnvironment env, MyContext myContext)

用十行代码快速创建权限管理系统

接下来,把种子数据拷贝到wwwroot文件夹(没有的话自己创建)下:

用十行代码快速创建权限管理系统

编译没问题,直接F5运行,用控制台方式打开,你就可以看到数据库已经生成成功了:

用十行代码快速创建权限管理系统

现在仅仅是创建好了数据库,那如何获取对应的service和repository呢?

6、注册Autofac服务集合

很简单,还是Autofac容器的创建过程:

StartUp.cs文件

 public void ConfigureContainer(ContainerBuilder builder)
 { 
     builder.RegisterModule(new BCVPAutofacModuleRegister());
 } 

Program.cs文件

.UseServiceProviderFactory(new AutofacServiceProviderFactory()) 

到这里权限部分的service和repository已经创建好了,接下来就是配置权限和api接口了。

7、注册权限服务

这个操作也是很简单,直接添加注册权限服务:

services.AddBCVPAuthorizationSetup(); 

当然你也可以自己添加权限服务,我这里已经封装好了JWT和Ids4两种模式,并且可以切换,还是稍微方便些,认证和权限中间件自己看着处理即可。

现在我们有了服务和仓储,也有了权限,那如何使用接口呢,毕竟是要登录吧,毕竟是要获取对应的接口数据、菜单数据等等。

8、引入权限模块api接口

这个操作也是很简单,我把这些controller也封装了一层,你直接引用这个类库就行。

添加api接口controller控制的nuget包:

Install-Package BCVP.Sample.Controller -Version 1.0.6.34 

用十行代码快速创建权限管理系统

(一个是服务,一个是接口)

这里万事俱备了( 还是要强调下,要用最新的版本 ),来看看效果吧,只需要一个Swagger即可了。

9、注册Swagger服务

这里你可以自己写,也可以使用我封装好的,毕竟已经有权限、自定义展示页、自定义返回策略了:

注册服务:

services.AddBCVPSwaggerSetup(); 

配置中间件:

 app.UseBCVPSwaggerMildd(); 

10、查看效果

直接来个动图更直观:

用十行代码快速创建权限管理系统

到这里,我们已经使用BCVP创建好了基础项目,也用到了其中的权限认证模块、Swagger文档模块、Autofac容器模块、自动生成种子数据和CodeFirst模块。

但是这里有一个问题,那如果我开发到中期,需要创建自己的实体类和服务仓储层,怎么写呢?别着急已经考虑到了。

3、从基建项目到生产

这里我就简单的列举两个重要功能吧,一个是根据实体类程序集CodeFirst到数据库,另一个是DbFirst生成四层服务文件。

1、根据你的Model生成到数据库

刚刚我们在生成种子数据后,在sqlite中,生成了权限部分的7个表+2个其他表:

用十行代码快速创建权限管理系统

然后在项目中,新建一个model层,创建一个NetersClub表,添加SqlSugarCore的nuget包引用:

用十行代码快速创建权限管理系统

在web层添加model层的引用,编译项目,一切正常。 然后直接执行接口即可,已经封装到了BCVP.Sample.Controller:直接执行这个接口,然后配置这两个参数,第一个是实体model层的程序集名称,注意要带后缀.dll,第二个是控制某特定命名空间下的实体才会被CodeFirst:

用十行代码快速创建权限管理系统

2、DdFirst获取四层文件

和上边的一样,还是直接调取接口就行,参数就是你新项目的名称,也是命名空间名。

用十行代码快速创建权限管理系统

然后就在c盘下生成了我们指定的文件:

用十行代码快速创建权限管理系统

点开来,可以看到所以的实体对应的服务都有,而且刚刚我们创建的实体NetersClub.cs也生成了:

用十行代码快速创建权限管理系统

总体来说,通过引用相应的Nuget包,然后大概十行配置代码,就可以快速的开发一个基于BCVP的项目,是不是还可以,试试吧。虽然有很多瑕疵,但是已经开始向前走了,不是么。

用十行代码快速创建权限管理系统