chore:banner添加种子数据

This commit is contained in:
橙子
2023-12-15 23:44:35 +08:00
parent 5a546cbbd0
commit a03a7162dd
50 changed files with 1104 additions and 9357 deletions

View File

@@ -1,11 +1,4 @@
using System; namespace Yi.Framework.AspNetCore
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Yi.Framework.AspNetCore
{ {
[Serializable] [Serializable]
public class RemoteServiceSuccessInfo public class RemoteServiceSuccessInfo
@@ -15,7 +8,6 @@ namespace Yi.Framework.AspNetCore
/// </summary> /// </summary>
public RemoteServiceSuccessInfo() public RemoteServiceSuccessInfo()
{ {
} }
/// <summary> /// <summary>

View File

@@ -0,0 +1,54 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Repositories;
using Yi.Framework.Bbs.Domain.Entities;
using Yi.Framework.Rbac.Domain.Entities;
using Yi.Framework.SqlSugarCore.Abstractions;
namespace Yi.Framework.Bbs.SqlSugarCore.DataSeeds
{
public class BannerDataSeed : IDataSeedContributor, ITransientDependency
{
private ISqlSugarRepository<BannerEntity> _repository;
public BannerDataSeed(ISqlSugarRepository<BannerEntity> repository)
{
_repository = repository;
}
public async Task SeedAsync(DataSeedContext context)
{
if (!await _repository.IsAnyAsync(x => true))
{
await _repository.InsertManyAsync(GetSeedData());
}
}
public List<BannerEntity> GetSeedData()
{
//这里临时使用了图床图床地址https://mjj.today/
List<BannerEntity> entities = new List<BannerEntity>()
{
new BannerEntity{
Name="欢迎",
Logo="https://i.miji.bid/2023/12/15/e6478d5d15a4b941077e336790c414f6.png",
Color=""
},
new BannerEntity{
Name="前端",
Logo="https://i.miji.bid/2023/12/15/07e9291c9311889a31a2b433d4decca0.jpeg",
Color=""
},
};
return entities;
}
}
}

View File

@@ -186,6 +186,7 @@ namespace Yi.Framework.Rbac.Application.Services
return await MapToGetOutputDtoAsync(entity); return await MapToGetOutputDtoAsync(entity);
} }
[OperLog("删除用户", OperEnum.Delete)] [OperLog("删除用户", OperEnum.Delete)]
[Permission("system:user:delete")]
public override async Task DeleteAsync(Guid id) public override async Task DeleteAsync(Guid id)
{ {
await base.DeleteAsync(id); await base.DeleteAsync(id);

View File

@@ -8,4 +8,9 @@
<ProjectReference Include="..\Yi.Abp.Domain.Shared\Yi.Abp.Domain.Shared.csproj" /> <ProjectReference Include="..\Yi.Abp.Domain.Shared\Yi.Abp.Domain.Shared.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Dtos\" />
<Folder Include="IServices\" />
</ItemGroup>
</Project> </Project>

View File

@@ -1,6 +1,7 @@
using Volo.Abp.Application.Services; using Volo.Abp.Application.Services;
using Volo.Abp.DependencyInjection;
namespace Yi.Abp.Application namespace Yi.Abp.Application.Services
{ {
public class TestService : ApplicationService public class TestService : ApplicationService
{ {

View File

@@ -13,4 +13,9 @@
<ProjectReference Include="..\Yi.Abp.Domain\Yi.Abp.Domain.csproj" /> <ProjectReference Include="..\Yi.Abp.Domain\Yi.Abp.Domain.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Jobs\" />
<Folder Include="EventHandlers\" />
</ItemGroup>
</Project> </Project>

View File

@@ -10,4 +10,11 @@
<ProjectReference Include="..\..\module\rbac\Yi.Framework.Rbac.Domain.Shared\Yi.Framework.Rbac.Domain.Shared.csproj" /> <ProjectReference Include="..\..\module\rbac\Yi.Framework.Rbac.Domain.Shared\Yi.Framework.Rbac.Domain.Shared.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Consts\" />
<Folder Include="Dtos\" />
<Folder Include="Enums\" />
<Folder Include="Etos\" />
</ItemGroup>
</Project> </Project>

View File

@@ -14,4 +14,10 @@
<ProjectReference Include="..\Yi.Abp.Domain.Shared\Yi.Abp.Domain.Shared.csproj" /> <ProjectReference Include="..\Yi.Abp.Domain.Shared\Yi.Abp.Domain.Shared.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="Entities\" />
<Folder Include="Managers\" />
<Folder Include="Repositories\" />
</ItemGroup>
</Project> </Project>

View File

@@ -9,4 +9,9 @@
<ProjectReference Include="..\Yi.Abp.Domain\Yi.Abp.Domain.csproj" /> <ProjectReference Include="..\Yi.Abp.Domain\Yi.Abp.Domain.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="DataSeeds\" />
<Folder Include="Repositories\" />
</ItemGroup>
</Project> </Project>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,84 +1,194 @@
2023-12-15 00:10:51.343 +08:00 [INF] Yi框架-Abp.vNext启动 2023-12-15 23:39:44.805 +08:00 [INF] Yi框架-Abp.vNext启动
2023-12-15 00:10:57.118 +08:00 [INF] Loaded ABP modules: 2023-12-15 23:39:50.595 +08:00 [INF] Loaded ABP modules:
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Abp.Web.YiAbpWebModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Abp.Web.YiAbpWebModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Abp.SqlsugarCore.YiAbpSqlSugarCoreModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Abp.SqlsugarCore.YiAbpSqlSugarCoreModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Abp.Domain.YiAbpDomainModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Abp.Domain.YiAbpDomainModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Abp.Domain.Shared.YiAbpDomainSharedModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Abp.Domain.Shared.YiAbpDomainSharedModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Rbac.Domain.Shared.YiFrameworkRbacDomainSharedModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Rbac.Domain.Shared.YiFrameworkRbacDomainSharedModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Data.AbpDataModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Data.AbpDataModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Mapster.YiFrameworkMapsterModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Mapster.YiFrameworkMapsterModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Core.YiFrameworkCoreModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Core.YiFrameworkCoreModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Bbs.Domain.Shared.YiFrameworkBbsDomainSharedModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Bbs.Domain.Shared.YiFrameworkBbsDomainSharedModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Rbac.Domain.YiFrameworkRbacDomainModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Rbac.Domain.YiFrameworkRbacDomainModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.AspNetCore.SignalR.AbpAspNetCoreSignalRModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.AspNetCore.SignalR.AbpAspNetCoreSignalRModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Bbs.Domain.YiFrameworkBbsDomainModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Bbs.Domain.YiFrameworkBbsDomainModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Rbac.SqlSugarCore.YiFrameworkRbacSqlSugarCoreModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Rbac.SqlSugarCore.YiFrameworkRbacSqlSugarCoreModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.SqlSugarCore.YiFrameworkSqlSugarCoreModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.SqlSugarCore.YiFrameworkSqlSugarCoreModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Bbs.SqlSugarCore.YiFrameworkBbsSqlSugarCoreModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Bbs.SqlSugarCore.YiFrameworkBbsSqlSugarCoreModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Abp.Application.YiAbpApplicationModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Abp.Application.YiAbpApplicationModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Abp.Application.Contracts.YiAbpApplicationContractsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Abp.Application.Contracts.YiAbpApplicationContractsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Rbac.Application.Contracts.YiFrameworkRbacApplicationContractsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Rbac.Application.Contracts.YiFrameworkRbacApplicationContractsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Ddd.Application.Contracts.YiFrameworkDddApplicationContractsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Ddd.Application.Contracts.YiFrameworkDddApplicationContractsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Bbs.Application.Contracts.YiFrameworkBbsApplicationContractsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Bbs.Application.Contracts.YiFrameworkBbsApplicationContractsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Rbac.Application.YiFrameworkRbacApplicationModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Rbac.Application.YiFrameworkRbacApplicationModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Ddd.Application.YiFrameworkDddApplicationModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Ddd.Application.YiFrameworkDddApplicationModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.BackgroundWorkers.Quartz.AbpBackgroundWorkersQuartzModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.BackgroundWorkers.Quartz.AbpBackgroundWorkersQuartzModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Quartz.AbpQuartzModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Quartz.AbpQuartzModule
2023-12-15 00:10:57.120 +08:00 [INF] - Yi.Framework.Bbs.Application.YiFrameworkBbsApplicationModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.Bbs.Application.YiFrameworkBbsApplicationModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.UI.AbpUiModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.UI.AbpUiModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule
2023-12-15 00:10:57.120 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule
2023-12-15 00:10:57.121 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule
2023-12-15 00:10:57.121 +08:00 [INF] - Volo.Abp.AspNetCore.Authentication.JwtBearer.AbpAspNetCoreAuthenticationJwtBearerModule 2023-12-15 23:39:50.596 +08:00 [INF] - Volo.Abp.AspNetCore.Authentication.JwtBearer.AbpAspNetCoreAuthenticationJwtBearerModule
2023-12-15 00:10:57.121 +08:00 [INF] - Yi.Framework.AspNetCore.YiFrameworkAspNetCoreModule 2023-12-15 23:39:50.596 +08:00 [INF] - Yi.Framework.AspNetCore.YiFrameworkAspNetCoreModule
2023-12-15 00:10:58.044 +08:00 [INF] User profile is available. Using 'C:\Users\45431\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest. 2023-12-15 23:39:51.577 +08:00 [INF] User profile is available. Using 'C:\Users\45431\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
2023-12-15 00:10:58.208 +08:00 [INF] Initialized all ABP modules. 2023-12-15 23:39:51.580 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Dept` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 00:10:58.431 +08:00 [INF] Now listening on: http://[::]:19001 2023-12-15 23:39:51.698 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Dictionary` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 00:10:58.431 +08:00 [INF] Application started. Press Ctrl+C to shut down. 2023-12-15 23:39:51.710 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `DictionaryType` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 00:10:58.431 +08:00 [INF] Hosting environment: Development 2023-12-15 23:39:51.724 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Menu` WHERE ( `MenuName` = N'系统管理' ) AND ( `IsDeleted` = 0 )
2023-12-15 00:10:58.431 +08:00 [INF] Content root path: D:\CSharp\Yi\Yi.Abp.Net8\src\Yi.Abp.Web 2023-12-15 23:39:51.751 +08:00 [INF] Initialized all ABP modules.
2023-12-15 23:39:51.767 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Post` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 23:39:51.815 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Role` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 23:39:51.838 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `User` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 23:39:51.857 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Banner` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 23:39:51.902 +08:00 [INF] Now listening on: http://[::]:19001
2023-12-15 23:39:51.902 +08:00 [INF] Application started. Press Ctrl+C to shut down.
2023-12-15 23:39:51.902 +08:00 [INF] Hosting environment: Development
2023-12-15 23:39:51.902 +08:00 [INF] Content root path: D:\CSharp\Yi\Yi.Abp.Net8\src\Yi.Abp.Web
2023-12-15 23:39:51.925 +08:00 [DBG] Yi-SQL执行:INSERT INTO `Banner` (`Id`,`Name`,`Logo`,`Color`,`IsDeleted`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`) VALUES(N'55cde9be-cfdf-c5a8-8ec9-3a0f804f28d5',N'欢迎',N'https://mjj.today/i/8dkmrd',N'',0,'2023-12-15 23:39:51.900',NULL,NULL,NULL), (N'c6315092-1340-7e4c-be36-3a0f804f28e6',N'前端',N'https://mjj.today/i/8dkbGu',N'',0,'2023-12-15 23:39:51.912',NULL,NULL,NULL) ;select @@IDENTITY
2023-12-15 23:39:51.943 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `DictionaryType` WHERE ( `DictType` = N'bbs_type_lable' ) AND ( `IsDeleted` = 0 )
2023-12-15 23:39:51.956 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Menu` WHERE ( `MenuName` = N'BBS' ) AND ( `IsDeleted` = 0 )
2023-12-15 23:39:51.968 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Config` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 23:42:51.087 +08:00 [INF] Yi框架-Abp.vNext启动
2023-12-15 23:42:56.241 +08:00 [INF] Loaded ABP modules:
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Abp.Web.YiAbpWebModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Abp.SqlsugarCore.YiAbpSqlSugarCoreModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Abp.Domain.YiAbpDomainModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Abp.Domain.Shared.YiAbpDomainSharedModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Rbac.Domain.Shared.YiFrameworkRbacDomainSharedModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainSharedModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyAbstractionsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.VirtualFileSystem.AbpVirtualFileSystemModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Settings.AbpSettingsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Localization.AbpLocalizationAbstractionsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Security.AbpSecurityModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Data.AbpDataModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.ObjectExtending.AbpObjectExtendingModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Validation.AbpValidationAbstractionsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Uow.AbpUnitOfWorkModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.EventBus.Abstractions.AbpEventBusAbstractionsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Threading.AbpThreadingModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Mapster.YiFrameworkMapsterModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Core.YiFrameworkCoreModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.ObjectMapping.AbpObjectMappingModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Bbs.Domain.Shared.YiFrameworkBbsDomainSharedModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Rbac.Domain.YiFrameworkRbacDomainModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.AspNetCore.SignalR.AbpAspNetCoreSignalRModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.AspNetCore.AbpAspNetCoreModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Json.AbpJsonModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Json.SystemTextJson.AbpJsonSystemTextJsonModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Json.AbpJsonAbstractionsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Timing.AbpTimingModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.MultiTenancy.AbpMultiTenancyModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Auditing.AbpAuditingContractsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Http.AbpHttpModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Http.AbpHttpAbstractionsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Minify.AbpMinifyModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Authorization.AbpAuthorizationAbstractionsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Validation.AbpValidationModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.ExceptionHandling.AbpExceptionHandlingModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Domain.AbpDddDomainModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.EventBus.AbpEventBusModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Guids.AbpGuidsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.BackgroundWorkers.AbpBackgroundWorkersModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.DistributedLocking.AbpDistributedLockingAbstractionsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Specifications.AbpSpecificationsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Caching.AbpCachingModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Serialization.AbpSerializationModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Bbs.Domain.YiFrameworkBbsDomainModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Rbac.SqlSugarCore.YiFrameworkRbacSqlSugarCoreModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.SqlSugarCore.YiFrameworkSqlSugarCoreModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Bbs.SqlSugarCore.YiFrameworkBbsSqlSugarCoreModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Abp.Application.YiAbpApplicationModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Abp.Application.Contracts.YiAbpApplicationContractsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Rbac.Application.Contracts.YiFrameworkRbacApplicationContractsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Ddd.Application.Contracts.YiFrameworkDddApplicationContractsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationContractsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Bbs.Application.Contracts.YiFrameworkBbsApplicationContractsModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Rbac.Application.YiFrameworkRbacApplicationModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Ddd.Application.YiFrameworkDddApplicationModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Application.AbpDddApplicationModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Features.AbpFeaturesModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.GlobalFeatures.AbpGlobalFeaturesModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.BackgroundWorkers.Quartz.AbpBackgroundWorkersQuartzModule
2023-12-15 23:42:56.242 +08:00 [INF] - Volo.Abp.Quartz.AbpQuartzModule
2023-12-15 23:42:56.242 +08:00 [INF] - Yi.Framework.Bbs.Application.YiFrameworkBbsApplicationModule
2023-12-15 23:42:56.243 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcModule
2023-12-15 23:42:56.243 +08:00 [INF] - Volo.Abp.ApiVersioning.AbpApiVersioningAbstractionsModule
2023-12-15 23:42:56.243 +08:00 [INF] - Volo.Abp.AspNetCore.Mvc.AbpAspNetCoreMvcContractsModule
2023-12-15 23:42:56.243 +08:00 [INF] - Volo.Abp.UI.Navigation.AbpUiNavigationModule
2023-12-15 23:42:56.243 +08:00 [INF] - Volo.Abp.UI.AbpUiModule
2023-12-15 23:42:56.243 +08:00 [INF] - Volo.Abp.Autofac.AbpAutofacModule
2023-12-15 23:42:56.243 +08:00 [INF] - Volo.Abp.Castle.AbpCastleCoreModule
2023-12-15 23:42:56.243 +08:00 [INF] - Volo.Abp.Swashbuckle.AbpSwashbuckleModule
2023-12-15 23:42:56.243 +08:00 [INF] - Volo.Abp.AspNetCore.Serilog.AbpAspNetCoreSerilogModule
2023-12-15 23:42:56.243 +08:00 [INF] - Volo.Abp.AspNetCore.Authentication.JwtBearer.AbpAspNetCoreAuthenticationJwtBearerModule
2023-12-15 23:42:56.243 +08:00 [INF] - Yi.Framework.AspNetCore.YiFrameworkAspNetCoreModule
2023-12-15 23:42:57.206 +08:00 [INF] User profile is available. Using 'C:\Users\45431\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
2023-12-15 23:42:57.302 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Dept` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 23:42:57.340 +08:00 [INF] Initialized all ABP modules.
2023-12-15 23:42:57.403 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Dictionary` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 23:42:57.420 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `DictionaryType` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 23:42:57.435 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Menu` WHERE ( `MenuName` = N'系统管理' ) AND ( `IsDeleted` = 0 )
2023-12-15 23:42:57.449 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Post` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 23:42:57.463 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Role` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 23:42:57.479 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `User` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 23:42:57.490 +08:00 [INF] Now listening on: http://[::]:19001
2023-12-15 23:42:57.490 +08:00 [INF] Application started. Press Ctrl+C to shut down.
2023-12-15 23:42:57.490 +08:00 [INF] Hosting environment: Development
2023-12-15 23:42:57.490 +08:00 [INF] Content root path: D:\CSharp\Yi\Yi.Abp.Net8\src\Yi.Abp.Web
2023-12-15 23:42:57.497 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Banner` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )
2023-12-15 23:42:57.550 +08:00 [DBG] Yi-SQL执行:INSERT INTO `Banner` (`Id`,`Name`,`Logo`,`Color`,`IsDeleted`,`CreationTime`,`CreatorId`,`LastModifierId`,`LastModificationTime`) VALUES(N'36a8208f-cc3e-03b4-9c6a-3a0f8051fded',N'欢迎',N'https://i.miji.bid/2023/12/15/e6478d5d15a4b941077e336790c414f6.png',N'',0,'2023-12-15 23:42:57.524',NULL,NULL,NULL), (N'5e183433-188c-043b-e69e-3a0f8051fdfd',N'前端',N'https://i.miji.bid/2023/12/15/07e9291c9311889a31a2b433d4decca0.jpeg',N'',0,'2023-12-15 23:42:57.536',NULL,NULL,NULL) ;select @@IDENTITY
2023-12-15 23:42:57.566 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `DictionaryType` WHERE ( `DictType` = N'bbs_type_lable' ) AND ( `IsDeleted` = 0 )
2023-12-15 23:42:57.587 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Menu` WHERE ( `MenuName` = N'BBS' ) AND ( `IsDeleted` = 0 )
2023-12-15 23:42:57.602 +08:00 [DBG] Yi-SQL执行:SELECT COUNT(1) FROM `Config` WHERE ( 1 = 1 ) AND ( `IsDeleted` = 0 )

View File

@@ -35,4 +35,8 @@
</None> </None>
</ItemGroup> </ItemGroup>
<ItemGroup>
<Folder Include="logs\" />
</ItemGroup>
</Project> </Project>

View File

@@ -0,0 +1,15 @@
本文档不会涉及过多的复杂的内容不仅仅是DDD的入门者最佳选择之一更是Abp.vNext的入门者最佳选择之一
即使只是当演练项目的态度去审视,我也很高兴的希望,你能从这里学习到不同角度下的理解
小说写手
做什么的
开源现状
不忘初心、一切开源,最纯粹的职位.net生态我不是什么大佬但有一颗的
兄弟圈
我有一个梦想

View File

@@ -1,6 +1,6 @@
## 它是什么? ## 它是什么?
YiFramework是一个基于.Net8+Abp.vNext+后端开源框架 YiFramework是一个基于.Net8+Abp.vNext+SqlSugar的DDD领域驱动设计后端开源框架
中文名称:意框架 中文名称:意框架
@@ -9,6 +9,11 @@ YiFramework是一个基于.Net8+Abp.vNext+的后端开源框架
但是,不仅仅是如此 但是,不仅仅是如此
## 它的理念 ## 它的理念
谁说Abp复杂谁说DDD难打破常规化繁为简新人入门项目二开最佳方式之一
> 一百个人就有一百种DDDYi框架不一定是极度严格的DDD而是站在巨人的肩膀上经过极多项目的提炼摸索出一种最佳实践
优雅的进行快速开发通常简单程度与优雅程度不可兼得Yi框架并不一昧的追求极致的解耦会站在用户使用角度上在使用难易度进行考虑衡量 优雅的进行快速开发通常简单程度与优雅程度不可兼得Yi框架并不一昧的追求极致的解耦会站在用户使用角度上在使用难易度进行考虑衡量
> 一个面向用户的快速开发后端框架 > 一个面向用户的快速开发后端框架
@@ -17,37 +22,21 @@ YiFramework是一个基于.Net8+Abp.vNext+的后端开源框架
## 特点 ## 特点
- 面向用户的后端框架,使用简单,适合小型、中型、企业级项目 - 面向用户的后端框架,使用简单,适合小型、中型、企业级项目
- 项目内置源码,不打包,方便二开 - 项目直接内置源码,不打包,非常适合进行二开改造
- 内置包含大量通用场景模块 - 内置包含大量通用场景模块
- 等等 - 等等
## 基础设施简介 ## 基础设施简介
- Jwt鉴权
- 接口级别授权
- 对象映射
- O/RM
- 数据过滤
- 多租户
- 逻辑删除
- 审计日志
- 种子数据
- 工作单元
- 模块化
- 动态Api
- 属性注入
- 自动依赖注入
- 当前用户
- 仓储
- Crud
以下全部功能可直接使用:
- [Abp.vNext官网](https://docs.abp.io/zh-Hans/abp/latest/)
- [SqlSugar官网](https://www.donet5.com/home/doc)
## 内置模块简介 ## 内置模块简介
- Rbac权限管理系统 - Rbac权限管理系统
- Bbs论坛社区系统 - Bbs论坛社区系统
## 业务项目
- RABC后台管理系统
- BBS社区系统
> 重复的东西,无需再写一遍,这也是优雅的体现之一 > 重复的东西,无需再写一遍,这也是优雅的体现之一

View File

@@ -0,0 +1,30 @@
# 后端
C# Asp.NetCore 8.0
- [x] 动态ApiAbp.vNext
- [x] 鉴权授权Jwt
- [x] 日志Serilog
- [x] 模块化Abp.vNext
- [x] 依赖注入Autofac
- [x] 对象映射Mapster
- [x] ORM: SqlsugarCore
- [x] 多租户Abp.vNext
- [x] 后台任务Quartz.Net
- [x] 本地缓存Abp.vNext
- [x] 分布式缓存Abp.vNext
- [x] 事件总线Abp.vNext
# 前端
js Vue3.2
- [x] 异步请求axios
- [x] 图表echarts
- [x] uielement-plus
- [x] 存储pinia
- [x] 路由vue-router
- [x] 打包vite
# 运维
- [x] 部署nginx
- [x] CICDgitlab+Jenkins
- [x] Dockerharbor

View File

@@ -0,0 +1,46 @@
本项目为前后端分离项目,后端需要.Net8环境启动前端需Node.js环境启动
推荐下载开发工具:
- Visual Studio 2022
- Visual Studio Core
## 后端
vs选中启动项目Yi.Abp.Web模板项目
![Alt text](../image/web.png)
直接启动即可,无任何其他环境依赖,数据库默认采用`Sqlsite`,缓存默认采用`本地缓存`
启动后浏览器将会弹出项目接口地址swagger
![Alt text](../image/swagger.png)
> 纳尼?怎么就看到一个测试接口?莫急,由于模块化方式,接口会越来越多,已自动分组至右上角,请点击分组
恭喜你,已经成功运行后端,是不是很简单?
> 等等表结构呢表数据呢为什么没有sql文件在这里统统不需要配置文件默认开启CodeFirst可自动建库及表结构默认开启DataSeed种子数据自动创建初始化数据
## 前端
对于前端默认提供两个项目分别对应后端的BBS与RBAC
- BBS -> Yi.BBS.Vue3
- RBAC -> Yi.RuoYi.Vue3
可根据需要选择进行启动
1:还原依赖
> npm install
2:启动项目
> npm run dev
## 配置启动地址:
前端:
![Alt text](../image/feStart.png)
后端:
![Alt text](../image/start.png)

View File

@@ -0,0 +1,104 @@
好了,相信当你非常容易的启动了项目之后,并看到了页面效果,也感受到它的简易
废话少说,直接上图:
![Alt text](../image/code.png)
***感觉和传统的不太一样,怎么这么多类库,感觉很难上手***
NONONONONO!
恰恰相反其实对于使用用户来说我们只关注src中的Yi.Abp即可如下图
项目模板结构:
> 懂Abp.vNext的大佬看到目录就会有一股熟悉的味道
Yi框架并没有直接采用Abp.vNext的模板生成而是从零进行搭建起来的但其中的分层结构与Abp.vNext是一致的只是EntityFramework更换成了SqlSugar
总体来看分为以下3个部分
- Framework Yi.Framework框架部分,基础设施)
- ModuleYi.Framework提供的内置模块部分例如Rbac、Bbs
- Src (真正业务进行开发的部分)
很好换句话来说只需要关注Src部分其他的都以`源代码`的方式并没有进行打成nuget包1是为了方便二开2是为了方便大家学习3是本来也不复杂
现在,我们来好好见识下为何如此分层吧~
说到分层,不得不提这个经典神图
![Alt text](../image/fenceng.png)
这张图就对应着我们的结构
![Alt text](../image/jiegou.png)
这个可能没接触过DDD的不能理解为什么要这样分层三层架构不好吗?这样感觉好难,不能理解!且慢,待你看完下面每层的概述,你就不会认为简单,这不比三层架构简单?
首先Yi框架的分层非常明确命名属于严格类型对于初学者一眼看破
简单分为6个类库
1. 应用层
2. 应用抽象层
3. 领域层
4. 共享层
5. 基础设施Sqlsugar层
6. Web层
我们从下至上讲解:
## Doman.Shared 共享层
最底层是Doman.Shared共享层这里存放各个常量、枚举、不依赖各个模块的通用类
![Alt text](../image/domanShared.png)
> Doman.Shared共享层 是一层很简单、不包含业务的模块让它尽可能简单有没有感觉像三层架构的Common
## Domain 领域层
只依赖Doman.Shared的`Domain领域层`
![Alt text](../image/domain.png)
你可以选择存放大部分业务到领域层中,我们称这种模式叫做:`重领域层模式`
你也可以选择存放大部分业务到它的上一层Application 应用层,叫做:`重应用层模式`
在领域层中,你的实体,以及跟实体相关的设施可在这里
同时你也可以创建领域服务(Managers文件夹中),管理当前子领域的聚合,例如:
> 在学校模块中,包含了学生、教师、教室,为了更加聚合,可在学校模块中创建领域服务
## Application 应用层
接下来,是应用层
![Alt text](../image/application.png)
熟悉的Crud、熟悉的Service这里可以存放简单的通用业务例如Crud
如果是重应用层开发你完全可以将业务写入到应用层当一个快乐的三层架构CrudBoy
另外关于上次的Job任务调度、事件处理也可以放在这里进行处理
> 简单而优雅~何乐而不为?
## Application.Contracrs 抽象层
Application.Contracrs应用抽象模块是对应用模块的抽象它的结构也非常的简单
![Alt text](../image/contracrs.png)
这里有Dtos的概念不出意外大部分人已经接触具体的可以在后续Crud中进行讲解
## SqlSugarCore 数据访问层
![Alt text](../image/sqlsugar.png)
这一层中,依赖领域层,但是不依赖应用层
用于使用Sqlsugar相关的操作比如`自定义仓储`
但是,其实大部分通用场景,框架内部已经封装,能用到这层的机会都比较少
对复杂的数据访问封装
> 由于Querable对象用起来并没有到达SugarQuerable的爽感且也不想让每个复杂查询都通过仓储进行扩展这会导致用户使用感较差所以经过各类平衡考虑YiFramework框架与Sqlsugar是有轻量的`耦合性`的框架提供Sqlsugar抽象层避免过重的耦合意味着你可以在大部分地方使用Sqlsugar的操作这在真正的业务项目来说使用非常的方便与Sqlsugar保持有一致的观念
## Web 层
最后一个同样非常简单的一层
Web模块它的目的只是利用Asp.NetCore host Web主机将应用层的业务通过Webapi形式暴露出去而已
![Alt text](../image/webPro.png)
可以看的出,结构很简单,甚至除了启动配置目录,连其他一个额外的目录都没有
> 综上所述,我们的业务,我的开发代码,大部分都在`领域层`与`应用层`
光说不练源代码直接提供rbac、bbs两大模块结构是一致的直接看看依葫芦画瓢不就清楚啦~

View File

@@ -22,39 +22,43 @@ app.UseSqlsugar();
另外,该模块类实现`AbpModule`基类 另外,该模块类实现`AbpModule`基类
ConfigureServices:用来配置容器服务 ConfigureServices:用来配置容器服务
OnApplicationInitialization用来配置管道模型 OnApplicationInitialization管道模型组装后执行
Abp内置`DependsOn`特性标签,可进行维护各个模块之间的依赖关系 Abp内置`DependsOn`特性标签,可进行维护各个模块之间的依赖关系
## 完整例子 ## 完整例子
创建模块化文件: 创建模块化文件:
``` cs ``` cs
using Volo.Abp.Caching;
using Volo.Abp.Domain;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Yi.Abp.Domain; using Yi.Abp.Domain.Shared;
using Yi.Abp.SqlSugarCore; using Yi.Framework.Bbs.Domain;
using Yi.Framework.Bbs.SqlSugarCore;
using Yi.Framework.Mapster; using Yi.Framework.Mapster;
using Yi.Framework.Rbac.SqlSugarCore; using Yi.Framework.Rbac.Domain;
using Yi.Framework.SqlSugarCore;
namespace Yi.Abp.SqlsugarCore namespace Yi.Abp.Domain
{ {
[DependsOn( [DependsOn(
typeof(YiAbpDomainModule), typeof(YiAbpDomainSharedModule),
typeof(YiFrameworkRbacSqlSugarCoreModule), typeof(YiFrameworkRbacDomainModule),
typeof(YiFrameworkBbsSqlSugarCoreModule), typeof(YiFrameworkBbsDomainModule),
typeof(YiFrameworkMapsterModule), typeof(YiFrameworkMapsterModule),
typeof(YiFrameworkSqlSugarCoreModule) typeof(AbpDddDomainModule),
typeof(AbpCachingModule)
)] )]
public class YiAbpSqlSugarCoreModule : AbpModule public class YiAbpDomainModule : AbpModule
{ {
public override void ConfigureServices(ServiceConfigurationContext context) public virtual void ConfigureServices(ServiceConfigurationContext context)
{
}
public virtual void OnPreApplicationInitialization(ApplicationInitializationContext context)
{ {
context.Services.AddYiDbContext<YiDbContext>();
} }
} }
} }
``` ```
在启动管道模型组装文件使用入口模块:

View File

@@ -0,0 +1,60 @@
## 简介
控制器层通常不包含业务的,我们控制器的代码经常是如下:
``` cs
[HttpGet]
[route("Info")]
pulic IActionResult GetInfo()
{
retrun Ok(_service.GetInfo());
}
```
我们不仅要创建控制器文件,还要写出应用层到控制器的方法,将业务的数据通过控制器暴露出去
> 控制器只做转发,没有做任何事情,形成了大量的冗余代码
## 如何使用
> 推荐直接在应用层中直接使用
使用动态Api需要3个条件
1. 任何一个类,实现`IRemoteService`接口
2. 该类需要加入DI容器
3. 在管道模型中配置动态Api服务:
> 通常我们直接继承`ApplicationService`即可,因为该类实现了`IRemoteService`
``` cs
//动态Api
Configure<AbpAspNetCoreMvcOptions>(options =>
{
options.ConventionalControllers.Create(typeof(YiAbpApplicationModule).Assembly, options => options.RemoteServiceName = "default");
});
```
根据方法名自动映射Http方法及路由
例如:
- GetInfoGet请求
- UpdateInfoPut请求
- RemoveInfo: Del请求
- CreateInfo: Post请求
## 完整例子
``` cs
using Volo.Abp.Application.Services;
namespace Yi.Abp.Application.Services
{
public class TestService : ApplicationService
{
/// <summary>
/// 你好世界
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public string GetHelloWorld(string? name)
{
return name ?? "HelloWord";
}
}
}
```

View File

@@ -0,0 +1,35 @@
## 简介
熟悉Asp.NetCore的小伙伴们对依赖注入可太熟悉这里也不在过多的讲述依赖注入知识
默认内置的注入方式,通常是在启动类文件,一个一个手动注入,例如:
``` cs
service.Addsingle<接口,类>()
```
同样,当服务过多,添加服务的代码会显的非常长,不够优雅
可以使用框架内置的接口
- IScopedDependency
- ISingletonDependency
- ITransientDependency
也可以使用框架内置的特性
- DependencyAttribute
- ExposeServicesAttribute
> 使用特性,可以指定特定类、接口作为抽象
## 如何使用
#### 特性方式:
在实现类上标注特性即可
``` cs
[ExposeServices(typeof(ITestService))]
[Dependency(ServiceLifetime.Transient)]
public class Test
{
}
```
#### 接口方式:
同理,根据不同的接口,选择不同的生命周期,自动会优先找自动以`I+类名`的接口作为抽象
``` cs
public class Test:ITest,ISingletonDependency
{
}
```

View File

@@ -0,0 +1,16 @@
## 简介
默认推荐的构造函数注入,依赖关系会非常明确
但是,会给程序带来大量的重复依赖注入代码,构造函数会非常的冗余
所以在Abp的中内置了属性注入方式
> 不是开玩笑,万不得已,最好别用。我也被坑过很多次,带来的弊端也非常明显,难以调试,且依赖关系不清晰,生命周期也是在构造函数之后
## 使用方式
使用极为简单:
``` cs
public IArticleRepository ArticleRepository { get; set; }
```
在具备get与set方法的属性上打上Autowired特性即可在该类被注入时候该属性会在容器中寻找并且赋值
我们的实现方式是通过AutoFac的模块你需要在启动的Host中添加autofac的属性注入模块
``` cs

View File

@@ -0,0 +1,41 @@
## 简介
如何获取当前请求用户信息?这个问题有很多个答案
常规是通过HttpContext对象进行获取它通常是在ControllerBase中控制器中内置了HttpContext对象
也可以通过依赖注入HttpContext访问器中获取
> 但是他们都不够优雅原因与HttpContext具备了强耦合如果对于没有HttpContext,将会非常的难维护,例如:单元测速
你可以依赖注入使用:`ICurrentUser`
它是瞬态注入,但是它能够获取当前作用域的用户信息
## 如何使用
任何地方,依赖注入:`ICurrentUser`
它包含属性:
``` cs
public interface ICurrentUser
{
//是否授权
public bool IsAuthenticated { get; }
//id
public Guid Id { get; }
//用户名
public string UserName { get; }
//租户id
public Guid TenantId { get; }
//邮件
public string Email { get; }
public bool EmailVerified { get; }
//电话
public string PhoneNumber { get; }
public bool PhoneNumberVerified { get; }
//角色codes
public string[]? Roles { get; }
}
```
直接使用即可
> 注意当前用户功能默认是继承到Core模块所以你无需进行任何引用直接使用即可

View File

@@ -0,0 +1,25 @@
## 简介
在C#强大的语法下Orm也是极度的优雅
本框架默认集成Sqlsugar Orm与YiFramework拥有相同理念
> 从用户体验出发,用起来爽,使用体验极佳
你可以查略 [Sqlsguar官网](https://www.donet5.com/Home/Doc)学习
## 如何使用
默认已经集成SqlSugar模块可依赖注入`ISqlSugarDbContext`即可我们称做它为Db用于操作数据库
> 不推荐直接使用db大部分的操作数据方式使用仓储完全够用`ISqlSugarRepository<Entity, Guid> repository`或`IRepository<Entity, Guid> repository`
由于Querable对象用起来并没有到达SugarQuerable的爽感且也不想让每个复杂查询都通过仓储进行扩展这会导致用户使用感较差
所以经过各类平衡考虑YiFramework框架与Sqlsugar是有轻量的`耦合性`框架提供Sqlsugar抽象层避免过重的耦合意味着你可以在`大部分`地方使用Sqlsugar的操作这在真正的业务项目来说使用非常的方便与Sqlsugar保持有一致的观念
我们已经集成SqlSugarCore模块在Abp.vNext中的
- Crud
- 仓储
- 工作单元
- 审计日志
- 逻辑删除
- 数据过滤
- 领域事件
意味着可以平滑的直接使用Abp.vNext的这些功能

View File

@@ -0,0 +1,28 @@
## 简介
使用仓储用于操作数据库数据,封装通用增删改查等方式
> `ISqlsugarRepository<TEntity>`仓储内置了Sqlsugar Db具有一定的强耦合但是使用起来会非常的舒服方便
** 原因:**Queryable对象是微软内置的查询对象可以使用linq语法同时也是为了Efcore的查询对象Sqlsugar 的查询对象为SugarQueryable对象两者并不兼容SugarQueryable的功能远远大与Queryable为此Sqlsugar不会限制自己而兼容Queryable对象
## 使用方式
方式1依赖注入`IRepository<TEntity>`接口即可
方式2依赖注入`IRepository<TEntity,Guid>`接口即可
方式3依赖注入`ISqlSugarRepository<TEntity>`接口即可
方式4依赖注入`ISqlSugarRepository<TEntity,Guid>`接口即可
方式5继承`SqlSugarRepository<TEntity,Guid>`基类,自定义仓储,注入自己的仓储接口,例如写一个`StudentRepository`继承`SqlSugarRepository<TEntity,Guid>`,再实现自己的`IStudentRepository`,后续使用`IStudentRepository`依赖注册进行使用即可
> 推荐简单常用`ISqlSugarRepository<TEntity,Guid>`的注入
`ISqlSugarRepository`内置了非常多的通用数据库操作方法,同时也内置了`ISqlsugarClient`Db对象在其中
内置方法非常多
- 查询
- 删除
- 修改
- 添加
- 分页查询
- Db对象

View File

@@ -0,0 +1,56 @@
## 简介
> 想做一个快乐的Crud boy满足你
可能绝大部分简单的业务真的只是不用类型的Crud大量的重复代码使用cv方式不够优雅
框架内部内部封装各种场景下的crud
## 使用
在应用层继承`YiCrudAppService`crud服务即可
在这之前你应该先了解各个dto的作用
> 注意我们当然可以直接使用Abp中的`CrudAppService`但由于Abp内置的Crud还缺少一些常用的接口比如批量删除等方式所以推荐使用`YiCrudAppService`,使用上完全没有区别
``` cs
- TGetOutputDto (单查返回的dto)
- TGetListOutputDto (多查返回的dto)
- TGetListInput (多查的条件)
- TCreateInput (创建的dto)
- TUpdateInput 更新的dto
```
根据Dto业务场景它有很多种选项依次为
``` cs
- YiCrudAppService<TEntity, TEntityDto, TKey>
- YiCrudAppService<TEntity, TEntityDto, TKey, TGetListInput>
- YiCrudAppService<TEntity, TEntityDto, TKey, TGetListInput, TCreateInput>
- YiCrudAppService<TEntity, TEntityDto, TKey, TGetListInput, TCreateInput, TUpdateInput>
- YiCrudAppService<TEntity, TGetOutputDto, TGetListOutputDto, TKey, TGetListInput, TCreateInput, TUpdateInput>
```
dto可以放到`Application.Contracts`层,同理接口继承`IYiCrudAppService`即可
```cs
- YiCrudAppService<TEntityDto, TKey>
- YiCrudAppService<TEntityDto, TKey, TGetListInput>
- YiCrudAppService<TEntityDto, TKey, TGetListInput, TCreateInput>
- YiCrudAppService<TEntityDto, TKey, TGetListInput, TCreateInput, TUpdateInput>
- YiCrudAppService<TGetOutputDto, TGetListOutputDto, TKey, TGetListInput, TCreateInput, TUpdateInput>
```
> 可以发现,接口,不应该与实体有直接关系
其中在YiCrudAppService中我们提供了一些内置的方法
```cs
public virtual async Task<TGetOutputDto> CreateAsync(TCreateInput input)
public virtual async Task<bool> DeleteAsync(string id)
public virtual async Task<TGetOutputDto> UpdateAsync(TKey id, TUpdateInput input)
public virtual async Task<TGetOutputDto> GetAsync(TKey id)
public virtual async Task<PagedResultDto<TGetListOutputDto>> GetListAsync(TGetListInput input)
```
同时还有映射关系:
``` cs
protected virtual Task<TGetOutputDto> MapToGetOutputDtoAsync(TEntity entity)
protected virtual Task<List<TGetListOutputDto>> MapToGetListOutputDtosAsync(List<TEntity> entities)
protected virtual Task<TGetListOutputDto> MapToGetListOutputDtoAsync(TEntity entity)
protected virtual Task<TGetOutputDto> MapToGetOutputDtoAsync(TEntity entity)
protected virtual Task<List<TGetListOutputDto>> MapToGetListOutputDtosAsync(List<TEntity> entities)
protected virtual Task<TGetListOutputDto> MapToGetListOutputDtoAsync(TEntity entity)
```
另外,它也提供了对应的`仓储`及`当前用户`等常用属性

View File

@@ -0,0 +1,42 @@
## 简介
审计日志是对数据的操作记录
例如:
1. 数据的创建者
2. 数据的创建时间
3. 数据的更新者
4. 数据的更新时间
对于重要的数据,我们应该提供审计日志功能,方便进行数据追溯
框架内部已`自动集成`,使用起来非常简单
## 如何使用
我们把全部的审计日志封装一个对象
你的**实体**可直接继继承或者实现接口
AuditedObject与IAuditedObject
它包含4个属性字段
``` cs
public DateTime CreationTime { get; set; }= DateTime.Now;
public Guid? CreatorId { get; set; }
public Guid? LastModifierId { get; set; }
public DateTime? LastModificationTime { get; set; }
```
**在执行插入的时候:**
会自动为`CreationTime` 与 `CreatorId` 赋值
**在执行更新的时候:**
会自动为`LastModificationTime` 与 `LastModifierId` 赋值
当然,如果只需要部分的审计日志,你完全可以实现单独的接口
分别为:
``` cs
IHasCreationTime
IMayHaveCreator
IModificationAuditedObject
IHasModificationTime
```

View File

@@ -0,0 +1,47 @@
## 简介
> 工作单元模式是“维护一个被业务事务影响的对象列表,协调变化的写入和并发问题的解决”
它的作用
1. 事务相关
2. 共用连接
...
## 如何使用
依赖注入`IUnitOfWorkManager`,使用`CreateContext`创建一个`IUnitOfWork`工作单元
在工作单元内部,可提交,回滚,获取仓储
``` cs
bool IsTran { get; set; }
bool IsCommit { get; set; }
bool IsClose { get; set; }
IRepository<T> GetRepository<T>();
bool Commit();
```
> 注意在除Get请求上其他请求默认都开启了工作单元post、put、delelte
## 完整例子
``` cs
private IUnitOfWorkManager _unitOfWorkManager { get; set; }
public void Test()
{
using (var uow = _unitOfWorkManager.CreateContext())
{
//仓储执行各种操作
//统一提交
uow.Commit();
}
}
```
## 特性方式
还可以通过`[UnitOfWork]`特性,打在方法上,该方法便会当作一个事务进行提交
``` cs
[UnitOfWork]
public void Test()
{
//仓储执行各种操作
}
```

View File

@@ -0,0 +1,92 @@
## 简介
种子数据一直都是一个很繁琐的东西,例如在初始化数据的时候,添加默认用户
可以通过导入sql的方式进行添加种子数据也可以通过程序代码中自动初始化数据
我们目前提供后者
## 如何使用
一切的根源,来源自:`IDataSeedContributor`
直接使用实现`IDataSeedContributor`接口,我们只需要实现 `SeedAsync(DataSeedContext context)`即可
在实现类上,要将该类加入容器中,推荐通过内置的依赖注入模块
当然,对于扩展,你可以重写其他的方法
#### 其他方式使用
另外你可以直接依赖注入直接使用IDataSeeder SeedAsync方法重新手动执行种子数据
> 默认在程序启动的时候,会根据配置文件选择,是否执行种子数据
## 完整例子
``` cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Guids;
using Yi.Framework.Rbac.Domain.Entities;
using Yi.Framework.SqlSugarCore.Abstractions;
namespace Yi.Framework.Bbs.SqlSugarCore.DataSeeds
{
public class ConfigDataSeed : IDataSeedContributor, ITransientDependency
{
private ISqlSugarRepository<ConfigEntity> _repository;
public ConfigDataSeed(ISqlSugarRepository<ConfigEntity> repository)
{
_repository = repository;
}
public async Task SeedAsync(DataSeedContext context)
{
if (!await _repository.IsAnyAsync(x => true))
{
await _repository.InsertManyAsync(GetSeedData());
}
}
public List<ConfigEntity> GetSeedData()
{
List<ConfigEntity> entities = new List<ConfigEntity>();
ConfigEntity config1 = new ConfigEntity()
{
ConfigKey = "bbs.site.name",
ConfigName = "站点名称",
ConfigValue = "意社区"
};
entities.Add(config1);
ConfigEntity config2 = new ConfigEntity()
{
ConfigKey = "bbs.site.author",
ConfigName = "站点作者",
ConfigValue = "橙子"
};
entities.Add(config2);
ConfigEntity config3 = new ConfigEntity()
{
ConfigKey = "bbs.site.icp",
ConfigName = "站点Icp备案",
ConfigValue = "赣ICP备20008025号"
};
entities.Add(config3);
ConfigEntity config4 = new ConfigEntity()
{
ConfigKey = "bbs.site.bottom",
ConfigName = "站点底部信息",
ConfigValue = "你好世界"
};
entities.Add(config4);
return entities;
}
}
}
```

View File

@@ -0,0 +1,80 @@
## 简介
> 鉴权是用于解析用户的令牌,知道用户是否携带令牌,并且知道用户信息是谁
改鉴权使用的是微软Asp.NetCore扩鉴权扩展方式
程序模块已内置
``` cs
context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ClockSkew = TimeSpan.Zero,
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = jwtOptions.Issuer,
ValidAudience = jwtOptions.Audience,
RequireExpirationTime = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtOptions.SecurityKey))
};
options.Events = new JwtBearerEvents
{
OnMessageReceived = context =>
{
var accessToken = context.Request.Query["access_token"];
if (!string.IsNullOrEmpty(accessToken))
{
context.Token = accessToken;
}
return Task.CompletedTask;
}
};
});
```
## 如何使用
默认已经集成所以在使用方面可要求客户端添加标准的jwtbear头即可
swagger 接口文档中已集成直接输入jwttoken即可
![Alt text](../image/swaggerIndex.png)
我们采用的是HSA对称加密方式只需要具备密钥
对应的配置文件
``` json
//鉴权
"JwtOptions": {
"Issuer": "https://ccnetcore.com",
"Audience": "https://ccnetcore.com",
"SecurityKey": "zqxwcevrbtnymu312412ihe9rfwhe78rh23djoi32hrui3ryf9e8wfh34iuj54y0934uti4h97fgw7hf97wyh8yy69520",
"ExpiresMinuteTime": 86400
}
```
## Token如何来
那肯定是登录啊登录接口会返回Token
那如何制作Token直接上代码下面这个也是登录的创建token的方式
``` cs
/// <summary>
/// 创建令牌
/// </summary>
/// <param name="dic"></param>
/// <returns></returns>
private string CreateToken(Dictionary<string, object> dic)
{
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_jwtOptions.SecurityKey));
var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var claims = dic.Select(x => new Claim(x.Key, x.Value.ToString())).ToList();
var token = new JwtSecurityToken(
issuer: _jwtOptions.Issuer,
audience: _jwtOptions.Audience,
claims: claims,
expires: DateTime.Now.AddSeconds(_jwtOptions.ExpiresMinuteTime),
notBefore: DateTime.Now,
signingCredentials: creds);
string returnToken = new JwtSecurityTokenHandler().WriteToken(token);
return returnToken;
}
```

View File

@@ -0,0 +1,18 @@
## 简介
> 授权必须基于鉴权之后,知道了用户的信息,根据用户权限列表进行判断是否有权限进入
框架内部集成授权方式并非为Asp.netcore授权方式而是提供一种更简单的方式
使用起来非常简单
## 使用
只需要在需要授权的接口上打上特性 `[Permission("code")]`接口
code为登录时候颁发的token中的权限如果该用户的token 权限列表中不包含code将被会拦截并提示未授权被拒绝
``` cs
[Permission("system:user:delete")]
public override async Task DeleteAsync(Guid id)
{
await base.DeleteAsync(id);
}
```

View File

@@ -0,0 +1,48 @@
## 简介
当程序出现异常之后,框架需要记录,同时反馈前端对应的信息
它通过`全局错误中间件`实现
错误后,将统一返回以下模型格式:
``` cs
public class RemoteServiceErrorInfo
{
public string? Code { get; set; }
/// <summary>
/// message.
/// </summary>
public string? Message { get; set; }
/// <summary>
/// details.
/// </summary>
public string? Details { get; set; }
/// <summary>
/// data.
/// </summary>
public object? Data { get; set; }
}
```
框架内部错误分为三大类:
#### 系统内部错误
> httpCode500
系统不能处理、或未发现的错误,需要即使进行修复
#### 业务友好错误
> httpCode:403
跟业务相关,业务请求不合理,例如:登录失败、数据重复
#### 授权错误
> httpCode:401
跟权限相关,代表当前用户权限不足
## 使用
你可以在程序任何地方进行抛出错误
``` cs
throw new Exception("系统错误");//状态码500
throw new UserFriendlyException("业务错误");//状态码403
throw new NotImplementedException("未实现");//状态码501
throw new UserFriendlyException("花里胡哨错误","401");//状态码401
```
Abp内部将自动抓取并返回给前端

View File

@@ -0,0 +1,5 @@
恭喜恭喜,看到了这里,说明你已经掌握了框架最常用的一些基础设施功能
现在你要做到的,是真正编写一个业务,将这些功能进行组合接口
那就万变不离其宗,还是以那个多少人的第一个项目来上手,著名鼎鼎的`图书管理系统`

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.5 KiB

BIN
Yi.Doc.Md/image/code.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

BIN
Yi.Doc.Md/image/domain.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.9 KiB

BIN
Yi.Doc.Md/image/feStart.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

BIN
Yi.Doc.Md/image/fenceng.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
Yi.Doc.Md/image/jiegou.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
Yi.Doc.Md/image/start.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 146 KiB

BIN
Yi.Doc.Md/image/swagger.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

BIN
Yi.Doc.Md/image/web.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
Yi.Doc.Md/image/webPro.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB