# Netcool
# 介绍
`Netcool`是一个基于.net core的Web应用脚手架,可以用于快速搭建后台管理系统,或者一个简单Web Api。
`Netcool`采用前后端分离的方式,包含Netcool.Api,[Netcool.Admin](https://github.com/NeilQ/Netcool.Admin)两个主要项目,
包含用户、菜单、权限等基础功能。
同时,Netcool系列还包含一些便捷的开发库以满足日常使用:
- [Netcool.Caching](https://github.com/NeilQ/Netcool/tree/master/src/extensions/Netcool.Caching)
- [Netcool.Excel](https://github.com/NeilQ/Netcool/tree/master/src/extensions/Netcool.Excel)
- [Netcool.HttpProxy](https://github.com/NeilQ/Netcool/tree/master/src/extensions/Netcool.HttpProxy)
- [Netcool.Swashbuckle.AspNetCore](https://github.com/NeilQ/Netcool/tree/master/src/extensions/Netcool.Swashbuckle.AspNetCore)
[![JetBrains Logo (Main) logo](https://resources.jetbrains.com/storage/products/company/brand/logos/jb_beam.svg)](https://jb.gg/OpenSourceSupport)
# 项目依赖
在集成一些基础设施时,Netcool尽量使用Microsoft的官方推荐方案,或者使用比较主流、Star数最多并且轻量的第三方Package。
过多造轮子会增加使用者的学习精力,过多的封装会让人使用起来摸不着头脑,
而主流的第三方库大家可能都比较熟悉了,有完善的文档,使用起来更加顺畅。
目前使用到的基础设施Package:
- ORM: Entity Framework core
- Logger: Serilog
- Swagger: Swashbuckle.AspNetCore
- Authentication: JwtBearer
- Mapper: Mapster
其他帮助类均根据 [官方文档](https://docs.microsoft.com/en-us/aspnet/core/introduction-to-aspnet-core?view=aspnetcore-5.0) 中推荐的解决方案实现。
# 项目分层
根据多年的开发经验,传统的三层框架(DAL,BLL,Application)在业务比较多的情况下,
会导致开发时定位某个模块文件时比较困难,经常要在三个文件夹下大量文件中翻找,
加上有些文件命名并不是十分规范,模块之间的业务边界不是很明确,会给开发者造成困扰。
因此Netcool在组织项目文件层次时,更加偏向与领域模型的方式,将同一模块的文件都放到一个文件夹下。
但要注意的是,项目文件的组织方式并不等同于领域模型的严格应用,对于大型项目或者大流量项目,现在很多时候都会采用微服务的方式进行拆分,其实这种方式就属于领域的拆分,
每个微服务就是一个业务领域,需要在实践中灵活应用。
# 数据库适配
Netcool默认使用Postgresql数据库,使用其他数据库只需通过EF更换数据库适配器,并修改`NetcoolDbContext`类中部分不兼容的代码。
首次同步数据库时,建议将`Netcool.Api.Domain`中的`Migrations`文件夹删除,重新生成同步文件。
# 内置模块
### 菜单与权限
菜单与相应权限目前仅支持直接在`InitialEntities`类中初始化并同步到数据库中。
在实际开发中发现,在UI编辑菜单或权限预定于内容并不是一个好的选择,经常会造成在不同环境中数据不一致,
因此由开发人员预定义并提供数据库同步脚本更加适合,统一职责范围,避免不必要的冲突。
### 用户与授权
Netcool使用JwtBearer进行用户授权,访问Api时,需要添加请求头: `Authorization: Bearer {token}`。
通过`[Authorize]`与`[AllowAnonymous]`属性控制Action是否需要访问授权。
为了方便本地调式与局域网调用,Netcool准备了Ip白名单授权,任何符合白名单Ip的请求,在没有JwtBearer的情况下,也可以通过授权验证。
```c#
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddIpWhitelist(o =>
{
o.Enable = true;
o.Ips = new {"::1", "127.0.0.1"};
})
.AddJwtBearer(options =>{});
services.AddAuthorization(options =>
{
var defaultAuthorizationPolicyBuilder =
new AuthorizationPolicyBuilder(IpWhitelistAuthenticationDefaults.AuthenticationScheme,
JwtBearerDefaults.AuthenticationScheme);
defaultAuthorizationPolicyBuilder = defaultAuthorizationPolicyBuilder.RequireAuthenticatedUser();
options.DefaultPolicy = defaultAuthorizationPolicyBuilder.Build();
})
```
如果仅仅需要在开发环境下允许不授权调用,也可以通过配置给所有Controller加上`[AllowAnonymous]`。
```c#
app.UseEndpoints(endpoints =>
{
// Add AllowAnonymousAttribute to all actions for dev env
if (env.IsDevelopment())
endpoints.MapControllers().WithMetadata(new AllowAnonymousAttribute());
else
endpoints.MapControllers();
endpoints.MapHealthChecks("/health");
});
```
### 公告
基于富文本的系统公告。
### 应用配置
Netcool将会检索运行目录下的conf文件夹,将所有.json文件添加到配置中,方便使用Docker部署时映射外部文件以覆盖默认配置,你也可以自定义你的配置文件夹:
```c#
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>().UseIISIntegration(); })
.ConfigureAppConfiguration(configBuilder =>
{
var connectionString = configBuilder.Build().GetConnectionString("Database");
configBuilder.AddEfConfiguration(options => { options.UseNpgsql(connectionString); }, true);
configBuilder.AddJsonFileFromDirectory(Common.IsWindows ? "conf" : "/conf");
});
```
此外,Netcool提供了`EFConfigurationProvider`,将数据库中的配置信息适配到内置的`Configuration`中,可以通过注入`IConfiguration`或者`IOptions`获取数据库中的配置信息,如UserService:
```c#
public UserService(IUserRepository userRepository,
IServiceAggregator serviceAggregator,
IRepository<Role> roleRepository,
IConfiguration config,
IRepository<UserRole> userRoleRepository) : base(
userRepository,
serviceAggregator)
{
......
_defaultPassword = config.GetValue<string>("User.DefaultPassword");
......
}
```
### 文件上传
启用文件上传需要在`appsettings.json`中加入配置
```json
{
"File": {
"UseHttps": false,
"HttpHost": "",
"SubWebPath": "file",
"PhysicalPath": "D:\\netcool-resources"
}
}
```
- UseHttps: 资源schema是否使用`https`。
- Host: 访问文件资源时使用的域名。当该值为空时将会从`HttpContext.Request.Host`中读取,
如果使用了多层代理,需要注意配置`X-Forwarded-Host`请求头。为了方便,可以直接为该值配置域名
- SubWebPath: 访问文件资源跟在域名后的二级路径,注意不能与`ApiController`中定于的路由相同。
- PhysicalPath: 物理文件路径
当Host="www.domain.com" SubWebPath="file"时,文件上传后返回的Dto中将包含URL:https://www.domain.com/file/20201212/xxx.png。
URL拼接操作在AutoMapper中自动处理。
### 权限验证
Netcool使用 [基于资源的授权](https://docs.microsoft.com/zh-cn/aspnet/core/security/authorization/resourcebased?view=aspnetcore-5.0) 的方式校验权限,
并且兼容`Role-based`与`Claim-based`授权方式。
#### 添加权限定义
将自定义的权限名称添加到`InitialEntities`中,并通过EF工具同步到数据库。当然,也可以随时更改`PermissionPolicyProvider`或者实现`IAuthorizationPolicyProvider`来自定义你的权限定义获取方式。
#### 在Service中校验权限
基础的CRUD操作可以直接通过给`GetPermissionName`、`UpdatePermissionName`、`CreatePermissionName`、`DeletePermissionName`属性赋值。
其他操作权限可以调用Service中的`CheckPermission`或者`AuthorizationService.Autho
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
C# + SQL Server 本系统包括两类用户:学生、管理员。管理员可以通过系统来添加管理员信息、修改管理员信息、添加学生信息、修改学生信息;开设课程、查询课程、录入成绩、统计成绩 管理系统是一种通过计算机技术实现的用于组织、监控和控制各种活动的软件系统。这些系统通常被设计用来提高效率、减少错误、加强安全性,同时提供数据和信息支持。以下是一些常见类型的管理系统: 学校管理系统: 用于学校或教育机构的学生信息、教职员工信息、课程管理、成绩记录、考勤管理等。学校管理系统帮助提高学校的组织效率和信息管理水平。 人力资源管理系统(HRM): 用于处理组织内的人事信息,包括员工招聘、培训记录、薪资管理、绩效评估等。HRM系统有助于企业更有效地管理人力资源,提高员工的工作效率和满意度。 库存管理系统: 用于追踪和管理商品或原材料的库存。这种系统可以帮助企业避免库存过剩或不足的问题,提高供应链的效率。 客户关系管理系统(CRM): 用于管理与客户之间的关系,包括客户信息、沟通记录、销售机会跟踪等。CRM系统有助于企业更好地理解客户需求,提高客户满意度和保留率。 医院管理系统: 用于管理医院或医疗机构的患者信息、医生排班、药品库存等。这种系统可以提高医疗服务的质量和效率。 财务管理系统: 用于记录和管理组织的财务信息,包括会计凭证、财务报表、预算管理等。财务管理系统
资源推荐
资源详情
资源评论
收起资源包目录
基于.Net 8的Web应用脚手架,用于快速搭建后台管理系统或者一个简单Web Api.zip (248个子文件)
web.config 811B
20211109090145_Init.Designer.cs 54KB
NetcoolDbContextModelSnapshot.cs 54KB
20211109090145_Init.cs 31KB
UserService.cs 10KB
Startup.cs 10KB
DbContextBase.cs 8KB
IRepository.cs 7KB
ProxyAdvancedExtensions.cs 7KB
FilesController.cs 7KB
NetcoolRedisCache.cs 7KB
CrudService.cs 7KB
EFCoreRepositoryBase.cs 6KB
AnnouncementService.cs 6KB
TypedExcelExporter.cs 6KB
InitialEntities.cs 6KB
ProxyExtensions.cs 6KB
Reflection.cs 5KB
TypedExcelImporter.cs 5KB
CrudServiceBase.cs 5KB
RoleService.cs 5KB
ExcelTests.cs 5KB
LoginService.cs 5KB
NetcoolMemoryDistributedCache.cs 5KB
MemoryDistributeCacheTests.cs 4KB
QueryableExtensions.cs 4KB
NetcoolDbContext.cs 4KB
RedisCacheTests.cs 4KB
FileService.cs 4KB
ServiceCollectionExtensions.cs 4KB
CrudControllerBase.cs 4KB
ExcelExporter.cs 4KB
RepositoryBase.cs 4KB
SwaggerGenOptionsExtensions.cs 3KB
Program.cs 3KB
EnumDescriptionDocumentFilter.cs 3KB
IDbContext.cs 3KB
QueryControllerBase.cs 3KB
LocalDateTimeModelBinder.cs 3KB
OrganizationService.cs 3KB
MenuService.cs 2KB
MultipartRequestHelper.cs 2KB
ICrudService.cs 2KB
EnumsController.cs 2KB
EfConfigurationProvider.cs 2KB
StringExtensions.cs 2KB
UsersController.cs 2KB
UserAnnouncementService.cs 2KB
HttpContextClientInfoProvider.cs 2KB
AppConfigurationService.cs 2KB
Startup.cs 2KB
EntityNotFoundException.cs 2KB
ErrorHandlingMiddleware.cs 2KB
FileUploadOperationFilter.cs 2KB
Encrypt.cs 2KB
IpWhitelistAuthenticationHandler.cs 2KB
PermissionPolicyProvider.cs 2KB
PermissionAuthorizationHandler.cs 2KB
NetcoolException.cs 2KB
UserRepository.cs 2KB
FileUploadExtensions.cs 2KB
WeatherForecastController.cs 2KB
FileDto.cs 2KB
ExpressionCombiner.cs 1KB
ServiceCollectionExtensions.cs 1KB
EntityDto.cs 1KB
ProxyMiddleware.cs 1KB
FileUrlResolver.cs 1KB
Menu.cs 1KB
SharedProxyOptions.cs 1KB
ValidateAttribute.cs 1KB
UnitOfWork.cs 1KB
WeatherForecastController.cs 1KB
CurrentUser.cs 1KB
EntityChangeObserver.cs 1KB
UserDto.cs 1KB
NameValue.cs 1KB
INetcoolDistributedCache.cs 1KB
CollectionExtensions.cs 1KB
ListResultDto.cs 1KB
Entity.cs 1023B
RolesController.cs 1005B
File.cs 993B
User.cs 970B
Program.cs 965B
WeatherForecastController.cs 961B
LocalDateTimeConverter.cs 947B
AppConfigurationDto.cs 930B
Common.cs 905B
Permission.cs 905B
NetcoolDbContextFactory.cs 898B
ExcelStyleOptions.cs 894B
AppConfiguration.cs 890B
ProxyServiceCollectionExtensions.cs 871B
TimeSpanConverter.cs 869B
MenusController.cs 850B
Program.cs 827B
SnakeCaseQueryValueProviderFactory.cs 799B
MenuDto.cs 785B
FileUploadOptions.cs 782B
共 248 条
- 1
- 2
- 3
资源评论
普通的一个普通猿
- 粉丝: 1462
- 资源: 1761
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功