commit
dc21846886
1690 changed files with 253689 additions and 0 deletions
@ -0,0 +1,360 @@ |
|||||
|
## Ignore Visual Studio temporary files, build results, and |
||||
|
## files generated by popular Visual Studio add-ons. |
||||
|
## |
||||
|
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore |
||||
|
|
||||
|
# User-specific files |
||||
|
*.rsuser |
||||
|
*.suo |
||||
|
*.user |
||||
|
*.userosscache |
||||
|
*.sln.docstates |
||||
|
|
||||
|
# User-specific files (MonoDevelop/Xamarin Studio) |
||||
|
*.userprefs |
||||
|
|
||||
|
# Mono auto generated files |
||||
|
mono_crash.* |
||||
|
|
||||
|
# Build results |
||||
|
[Dd]ebug/ |
||||
|
[Dd]ebugPublic/ |
||||
|
[Rr]elease/ |
||||
|
[Rr]eleases/ |
||||
|
x64/ |
||||
|
x86/ |
||||
|
[Ww][Ii][Nn]32/ |
||||
|
[Aa][Rr][Mm]/ |
||||
|
[Aa][Rr][Mm]64/ |
||||
|
bld/ |
||||
|
[Bb]in/ |
||||
|
[Oo]bj/ |
||||
|
[Ll]og/ |
||||
|
[Ll]ogs/ |
||||
|
|
||||
|
# Visual Studio 2015/2017 cache/options directory |
||||
|
.vs/ |
||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot |
||||
|
#wwwroot/ |
||||
|
|
||||
|
# Visual Studio 2017 auto generated files |
||||
|
Generated\ Files/ |
||||
|
|
||||
|
# MSTest test Results |
||||
|
[Tt]est[Rr]esult*/ |
||||
|
[Bb]uild[Ll]og.* |
||||
|
|
||||
|
# NUnit |
||||
|
*.VisualState.xml |
||||
|
TestResult.xml |
||||
|
nunit-*.xml |
||||
|
|
||||
|
# Build Results of an ATL Project |
||||
|
[Dd]ebugPS/ |
||||
|
[Rr]eleasePS/ |
||||
|
dlldata.c |
||||
|
|
||||
|
# Benchmark Results |
||||
|
BenchmarkDotNet.Artifacts/ |
||||
|
|
||||
|
# .NET Core |
||||
|
project.lock.json |
||||
|
project.fragment.lock.json |
||||
|
artifacts/ |
||||
|
|
||||
|
# ASP.NET Scaffolding |
||||
|
ScaffoldingReadMe.txt |
||||
|
|
||||
|
# StyleCop |
||||
|
StyleCopReport.xml |
||||
|
|
||||
|
# Files built by Visual Studio |
||||
|
*_i.c |
||||
|
*_p.c |
||||
|
*_h.h |
||||
|
*.ilk |
||||
|
*.meta |
||||
|
*.obj |
||||
|
*.iobj |
||||
|
*.pch |
||||
|
*.pdb |
||||
|
*.ipdb |
||||
|
*.pgc |
||||
|
*.pgd |
||||
|
*.rsp |
||||
|
*.sbr |
||||
|
*.tlb |
||||
|
*.tli |
||||
|
*.tlh |
||||
|
*.tmp |
||||
|
*.tmp_proj |
||||
|
*_wpftmp.csproj |
||||
|
*.log |
||||
|
*.vspscc |
||||
|
*.vssscc |
||||
|
.builds |
||||
|
*.pidb |
||||
|
*.svclog |
||||
|
*.scc |
||||
|
|
||||
|
# Chutzpah Test files |
||||
|
_Chutzpah* |
||||
|
|
||||
|
# Visual C++ cache files |
||||
|
ipch/ |
||||
|
*.aps |
||||
|
*.ncb |
||||
|
*.opendb |
||||
|
*.opensdf |
||||
|
*.sdf |
||||
|
*.cachefile |
||||
|
*.VC.db |
||||
|
*.VC.VC.opendb |
||||
|
|
||||
|
# Visual Studio profiler |
||||
|
*.psess |
||||
|
*.vsp |
||||
|
*.vspx |
||||
|
*.sap |
||||
|
|
||||
|
# Visual Studio Trace Files |
||||
|
*.e2e |
||||
|
|
||||
|
# TFS 2012 Local Workspace |
||||
|
$tf/ |
||||
|
|
||||
|
# Guidance Automation Toolkit |
||||
|
*.gpState |
||||
|
|
||||
|
# ReSharper is a .NET coding add-in |
||||
|
_ReSharper*/ |
||||
|
*.[Rr]e[Ss]harper |
||||
|
*.DotSettings.user |
||||
|
|
||||
|
# TeamCity is a build add-in |
||||
|
_TeamCity* |
||||
|
|
||||
|
# DotCover is a Code Coverage Tool |
||||
|
*.dotCover |
||||
|
|
||||
|
# AxoCover is a Code Coverage Tool |
||||
|
.axoCover/* |
||||
|
!.axoCover/settings.json |
||||
|
|
||||
|
# Coverlet is a free, cross platform Code Coverage Tool |
||||
|
coverage*[.json, .xml, .info] |
||||
|
|
||||
|
# Visual Studio code coverage results |
||||
|
*.coverage |
||||
|
*.coveragexml |
||||
|
|
||||
|
# NCrunch |
||||
|
_NCrunch_* |
||||
|
.*crunch*.local.xml |
||||
|
nCrunchTemp_* |
||||
|
|
||||
|
# MightyMoose |
||||
|
*.mm.* |
||||
|
AutoTest.Net/ |
||||
|
|
||||
|
# Web workbench (sass) |
||||
|
.sass-cache/ |
||||
|
|
||||
|
# Installshield output folder |
||||
|
[Ee]xpress/ |
||||
|
|
||||
|
# DocProject is a documentation generator add-in |
||||
|
DocProject/buildhelp/ |
||||
|
DocProject/Help/*.HxT |
||||
|
DocProject/Help/*.HxC |
||||
|
DocProject/Help/*.hhc |
||||
|
DocProject/Help/*.hhk |
||||
|
DocProject/Help/*.hhp |
||||
|
DocProject/Help/Html2 |
||||
|
DocProject/Help/html |
||||
|
|
||||
|
# Click-Once directory |
||||
|
publish/ |
||||
|
|
||||
|
# Publish Web Output |
||||
|
*.[Pp]ublish.xml |
||||
|
*.azurePubxml |
||||
|
# Note: Comment the next line if you want to checkin your web deploy settings, |
||||
|
# but database connection strings (with potential passwords) will be unencrypted |
||||
|
*.pubxml |
||||
|
*.publishproj |
||||
|
|
||||
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to |
||||
|
# checkin your Azure Web App publish settings, but sensitive information contained |
||||
|
# in these scripts will be unencrypted |
||||
|
PublishScripts/ |
||||
|
|
||||
|
# NuGet Packages |
||||
|
*.nupkg |
||||
|
# NuGet Symbol Packages |
||||
|
*.snupkg |
||||
|
# The packages folder can be ignored because of Package Restore |
||||
|
**/[Pp]ackages/* |
||||
|
# except build/, which is used as an MSBuild target. |
||||
|
!**/[Pp]ackages/build/ |
||||
|
# Uncomment if necessary however generally it will be regenerated when needed |
||||
|
#!**/[Pp]ackages/repositories.config |
||||
|
# NuGet v3's project.json files produces more ignorable files |
||||
|
*.nuget.props |
||||
|
*.nuget.targets |
||||
|
|
||||
|
# Microsoft Azure Build Output |
||||
|
csx/ |
||||
|
*.build.csdef |
||||
|
|
||||
|
# Microsoft Azure Emulator |
||||
|
ecf/ |
||||
|
rcf/ |
||||
|
|
||||
|
# Windows Store app package directories and files |
||||
|
AppPackages/ |
||||
|
BundleArtifacts/ |
||||
|
Package.StoreAssociation.xml |
||||
|
_pkginfo.txt |
||||
|
*.appx |
||||
|
*.appxbundle |
||||
|
*.appxupload |
||||
|
|
||||
|
# Visual Studio cache files |
||||
|
# files ending in .cache can be ignored |
||||
|
*.[Cc]ache |
||||
|
# but keep track of directories ending in .cache |
||||
|
!?*.[Cc]ache/ |
||||
|
|
||||
|
# Others |
||||
|
ClientBin/ |
||||
|
~$* |
||||
|
*~ |
||||
|
*.dbmdl |
||||
|
*.dbproj.schemaview |
||||
|
*.jfm |
||||
|
*.pfx |
||||
|
*.publishsettings |
||||
|
orleans.codegen.cs |
||||
|
|
||||
|
# Including strong name files can present a security risk |
||||
|
# (https://github.com/github/gitignore/pull/2483#issue-259490424) |
||||
|
#*.snk |
||||
|
|
||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components |
||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) |
||||
|
#bower_components/ |
||||
|
|
||||
|
# RIA/Silverlight projects |
||||
|
Generated_Code/ |
||||
|
|
||||
|
# Backup & report files from converting an old project file |
||||
|
# to a newer Visual Studio version. Backup files are not needed, |
||||
|
# because we have git ;-) |
||||
|
_UpgradeReport_Files/ |
||||
|
Backup*/ |
||||
|
UpgradeLog*.XML |
||||
|
UpgradeLog*.htm |
||||
|
ServiceFabricBackup/ |
||||
|
*.rptproj.bak |
||||
|
|
||||
|
# SQL Server files |
||||
|
*.mdf |
||||
|
*.ldf |
||||
|
*.ndf |
||||
|
|
||||
|
# Business Intelligence projects |
||||
|
*.rdl.data |
||||
|
*.bim.layout |
||||
|
*.bim_*.settings |
||||
|
*.rptproj.rsuser |
||||
|
*- [Bb]ackup.rdl |
||||
|
*- [Bb]ackup ([0-9]).rdl |
||||
|
*- [Bb]ackup ([0-9][0-9]).rdl |
||||
|
|
||||
|
# Microsoft Fakes |
||||
|
FakesAssemblies/ |
||||
|
|
||||
|
# GhostDoc plugin setting file |
||||
|
*.GhostDoc.xml |
||||
|
|
||||
|
# Node.js Tools for Visual Studio |
||||
|
.ntvs_analysis.dat |
||||
|
node_modules/ |
||||
|
|
||||
|
# Visual Studio 6 build log |
||||
|
*.plg |
||||
|
|
||||
|
# Visual Studio 6 workspace options file |
||||
|
*.opt |
||||
|
|
||||
|
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) |
||||
|
*.vbw |
||||
|
|
||||
|
# Visual Studio LightSwitch build output |
||||
|
**/*.HTMLClient/GeneratedArtifacts |
||||
|
**/*.DesktopClient/GeneratedArtifacts |
||||
|
**/*.DesktopClient/ModelManifest.xml |
||||
|
**/*.Server/GeneratedArtifacts |
||||
|
**/*.Server/ModelManifest.xml |
||||
|
_Pvt_Extensions |
||||
|
|
||||
|
# Paket dependency manager |
||||
|
.paket/paket.exe |
||||
|
paket-files/ |
||||
|
|
||||
|
# FAKE - F# Make |
||||
|
.fake/ |
||||
|
|
||||
|
# CodeRush personal settings |
||||
|
.cr/personal |
||||
|
|
||||
|
# Python Tools for Visual Studio (PTVS) |
||||
|
__pycache__/ |
||||
|
*.pyc |
||||
|
|
||||
|
# Cake - Uncomment if you are using it |
||||
|
# tools/** |
||||
|
# !tools/packages.config |
||||
|
|
||||
|
# Tabs Studio |
||||
|
*.tss |
||||
|
|
||||
|
# Telerik's JustMock configuration file |
||||
|
*.jmconfig |
||||
|
|
||||
|
# BizTalk build output |
||||
|
*.btp.cs |
||||
|
*.btm.cs |
||||
|
*.odx.cs |
||||
|
*.xsd.cs |
||||
|
|
||||
|
# OpenCover UI analysis results |
||||
|
OpenCover/ |
||||
|
|
||||
|
# Azure Stream Analytics local run output |
||||
|
ASALocalRun/ |
||||
|
|
||||
|
# MSBuild Binary and Structured Log |
||||
|
*.binlog |
||||
|
|
||||
|
# NVidia Nsight GPU debugger configuration file |
||||
|
*.nvuser |
||||
|
|
||||
|
# MFractors (Xamarin productivity tool) working folder |
||||
|
.mfractor/ |
||||
|
|
||||
|
# Local History for Visual Studio |
||||
|
.localhistory/ |
||||
|
|
||||
|
# BeatPulse healthcheck temp database |
||||
|
healthchecksdb |
||||
|
|
||||
|
# Backup folder for Package Reference Convert tool in Visual Studio 2017 |
||||
|
MigrationBackup/ |
||||
|
|
||||
|
# Ionide (cross platform F# VS Code tools) working folder |
||||
|
.ionide/ |
||||
|
|
||||
|
# Fody - auto-generated XML schema |
||||
|
FodyWeavers.xsd |
@ -0,0 +1,53 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using BaseService.RelationBaseData; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
|
||||
|
namespace BaseService.BaseData.BranchManagement.Dto |
||||
|
{ |
||||
|
public class BranchDto : EntityDto<Guid> |
||||
|
{ |
||||
|
public short CategoryId { get; set; } |
||||
|
|
||||
|
public Guid? Pid { get; set; } |
||||
|
|
||||
|
public string Name { get; set; } |
||||
|
|
||||
|
public string FullName { get; set; } |
||||
|
|
||||
|
public int Sort { get; set; } |
||||
|
|
||||
|
public bool Enabled { get; set; } |
||||
|
|
||||
|
public bool HasChildren { get; set; } |
||||
|
|
||||
|
public bool Leaf { get; set; } |
||||
|
|
||||
|
#region >扩展字段<
|
||||
|
public string Label { get; set; } |
||||
|
#endregion
|
||||
|
|
||||
|
public virtual ICollection<BranchRole> Roles { get; set; } |
||||
|
//public short CategoryId { get; set; }
|
||||
|
|
||||
|
//public Guid? Pid { get; set; }
|
||||
|
|
||||
|
//public string Name { get; set; }
|
||||
|
|
||||
|
//public string FullName { get; set; }
|
||||
|
|
||||
|
//public int Sort { get; set; }
|
||||
|
|
||||
|
//public bool Enabled { get; set; }
|
||||
|
|
||||
|
//public bool HasChildren { get; set; }
|
||||
|
|
||||
|
//public bool Leaf { get; set; }
|
||||
|
|
||||
|
//#region >扩展字段<
|
||||
|
//public string Label { get; set; }
|
||||
|
//#endregion
|
||||
|
|
||||
|
//public virtual ICollection<BranchRole> Roles { get; set; }
|
||||
|
} |
||||
|
} |
@ -0,0 +1,35 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations; |
||||
|
using BaseService.RelationBaseData; |
||||
|
|
||||
|
namespace BaseService.BaseData.BranchManagement.Dto |
||||
|
{/// <summary>
|
||||
|
/// 分支DTO
|
||||
|
/// </summary>
|
||||
|
public class CreateOrUpdateBranchDto |
||||
|
{ |
||||
|
public short CategoryId { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 子分支ID
|
||||
|
/// </summary>
|
||||
|
public Guid? Pid { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 分支名称
|
||||
|
/// </summary>
|
||||
|
[Required] |
||||
|
public string Name { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 分类
|
||||
|
/// </summary>
|
||||
|
public int Sort { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 是否可用
|
||||
|
/// </summary>
|
||||
|
public bool Enabled { get; set; } |
||||
|
/// <summary>
|
||||
|
/// 对应的角色列表
|
||||
|
/// </summary>
|
||||
|
public virtual ICollection<BranchRole> Roles { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,16 @@ |
|||||
|
using System; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
|
||||
|
namespace BaseService.BaseData.BranchManagement.Dto |
||||
|
{ |
||||
|
public class GetBranchInputDto : PagedAndSortedResultRequestDto |
||||
|
{ |
||||
|
public Guid? Id { get; set; } |
||||
|
|
||||
|
public string Filter { get; set; } |
||||
|
|
||||
|
public short? CategoryId { get; set; } |
||||
|
|
||||
|
public Guid? Pid { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,32 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Threading.Tasks; |
||||
|
using BaseService.BaseData.BranchManagement.Dto; |
||||
|
using BaseService.RelationData.Dto; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Volo.Abp.Application.Services; |
||||
|
using Volo.Abp.Identity; |
||||
|
|
||||
|
namespace BaseService.BaseData.BranchManagement |
||||
|
{ |
||||
|
public interface IBranchAppService : IApplicationService |
||||
|
{ |
||||
|
Task<PagedResultDto<BranchDto>> GetPagedListAsync(GetBranchInputDto input); |
||||
|
|
||||
|
Task<ListResultDto<BranchDto>> GetAllAsync(Guid? id, string filter); |
||||
|
|
||||
|
Task<ListResultDto<BranchDto>> GetChildrenAsync(); |
||||
|
|
||||
|
Task<BranchDto> GetAsync(Guid id); |
||||
|
|
||||
|
Task<BranchDto> CreateAsync(CreateOrUpdateBranchDto input); |
||||
|
|
||||
|
Task<BranchDto> UpdateAsync(Guid id, CreateOrUpdateBranchDto input); |
||||
|
|
||||
|
Task DeleteAsync(List<Guid> ids); |
||||
|
|
||||
|
Task<ListResultDto<BranchRoleDto>> GetRolesAsync(Guid branchId); |
||||
|
|
||||
|
Task<PagedResultDto<IdentityRoleDto>> GetPagedRolesAsync(Guid branchId, PagedAndSortedResultRequestDto input); |
||||
|
} |
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
using System.Collections.Generic; |
||||
|
|
||||
|
namespace BaseService.BaseData.Permissions.Dto |
||||
|
{ |
||||
|
public class ApplicationAuthes |
||||
|
{ |
||||
|
public Dictionary<string, bool> Policies { get; set; } |
||||
|
|
||||
|
public Dictionary<string, bool> GrantedPolicies { get; set; } |
||||
|
|
||||
|
public ApplicationAuthes() |
||||
|
{ |
||||
|
Policies = new Dictionary<string, bool>(); |
||||
|
GrantedPolicies = new Dictionary<string, bool>(); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,30 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Collections.ObjectModel; |
||||
|
using Volo.Abp.Identity; |
||||
|
|
||||
|
namespace BaseService.BaseData.UserBranchRoleManagement.Dto |
||||
|
{ |
||||
|
public class CreateOrUpdateUserBranchDto |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 主键
|
||||
|
/// </summary>
|
||||
|
public Guid Id { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 用户ID
|
||||
|
/// </summary>
|
||||
|
public Guid UserId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 分支ID
|
||||
|
/// </summary>
|
||||
|
public Guid BranchId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 角色列表
|
||||
|
/// </summary>
|
||||
|
public virtual ICollection<UserBranchRole> Roles { get; set; } = new Collection<UserBranchRole>(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,12 @@ |
|||||
|
using System; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
|
||||
|
namespace BaseService.BaseData.UserBranchRoleManagement.Dto |
||||
|
{ |
||||
|
public class GetUserBranchInput : PagedAndSortedResultRequestDto |
||||
|
{ |
||||
|
public Guid? UserId { get; set; } |
||||
|
public Guid? BranchId { get; set; } |
||||
|
public string Filter { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,38 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Collections.ObjectModel; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Volo.Abp.Domain.Entities; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
|
||||
|
namespace BaseService.BaseData.UserBranchRoleManagement.Dto |
||||
|
{ |
||||
|
public class UserBranchDto : EntityDto<Guid> |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 用户ID
|
||||
|
/// </summary>
|
||||
|
public Guid UserId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 用户名称
|
||||
|
/// </summary>
|
||||
|
[NotMapped] |
||||
|
public string UserName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 分支ID
|
||||
|
/// </summary>
|
||||
|
public Guid BranchId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 分支机构名称
|
||||
|
/// </summary>
|
||||
|
[NotMapped] |
||||
|
public string BranchName { get; set; } |
||||
|
|
||||
|
public virtual ICollection<UserBranchRole> Roles { get; set; } = new Collection<UserBranchRole>(); |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,48 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Threading.Tasks; |
||||
|
using BaseService.BaseData.Permissions.Dto; |
||||
|
using BaseService.BaseData.UserBranchRoleManagement.Dto; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Volo.Abp.Application.Services; |
||||
|
|
||||
|
namespace BaseService.BaseData.UserBranchRoleManagement |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 用户--分支--角色
|
||||
|
/// </summary>
|
||||
|
public interface IUserBranchAppService : IApplicationService |
||||
|
{ |
||||
|
Task<PagedResultDto<UserBranchDto>> GetPagedListAsync(GetUserBranchInput input); |
||||
|
|
||||
|
Task<UserBranchDto> GetAsync(Guid id); |
||||
|
|
||||
|
//Task<UserBranchDto> CreateAsync(CreateOrUpdateUserBranchDto input);
|
||||
|
Task CreateUpdateAsync(CreateOrUpdateUserBranchDto input); |
||||
|
|
||||
|
Task<UserBranchDto> UpdateAsync(Guid id, CreateOrUpdateUserBranchDto input); |
||||
|
|
||||
|
Task DeleteAsync(List<Guid> ids); |
||||
|
|
||||
|
Task<List<UserBranchDto>> GetUserBranchsAsync(Guid userId); |
||||
|
|
||||
|
Task<List<UserBranchDto>> GetCurrentUserBranchesAsync(); |
||||
|
|
||||
|
Task<ApplicationAuthes> GetAuthConfigAsync(Guid branchId); |
||||
|
|
||||
|
Task<List<UserBranchRole>> GetUserRolesAsync(Guid userId,Guid branchId); |
||||
|
|
||||
|
Task DeleteUnitAsync(Guid userId, Guid branchId); |
||||
|
|
||||
|
//Task<List<UserBranchRole>> GetBranchRolesAsync(Guid branchId);
|
||||
|
List<UserBranchRole> GetBranchRolesAsync(Guid branchId); |
||||
|
|
||||
|
//Task<List<UserBranchRole>> GetUserRolesAsync(Guid userId);
|
||||
|
List<UserBranchRole> GetUserRolesAsync(Guid userId); |
||||
|
|
||||
|
Task<UserBranchDto> GetCurrentUserBranchAsync(Guid userId); |
||||
|
|
||||
|
Task DeleteUnitAsync(Guid userId); |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk"> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<OutputType>Library</OutputType> |
||||
|
<TargetFramework>net5.0</TargetFramework> |
||||
|
<RootNamespace>BaseService</RootNamespace> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="Volo.Abp.Ddd.Application" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.Identity.Application.Contracts" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.PermissionManagement.Application.Contracts" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.Settings" Version="4.3.3" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\BaseService.Domain\BaseService.Domain.csproj" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
</Project> |
@ -0,0 +1,329 @@ |
|||||
|
<?xml version="1.0"?> |
||||
|
<doc> |
||||
|
<assembly> |
||||
|
<name>BaseService.Application.Contracts</name> |
||||
|
</assembly> |
||||
|
<members> |
||||
|
<member name="T:BaseService.BaseData.BranchManagement.Dto.CreateOrUpdateBranchDto"> |
||||
|
<summary> |
||||
|
分支DTO |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.BranchManagement.Dto.CreateOrUpdateBranchDto.Pid"> |
||||
|
<summary> |
||||
|
子分支ID |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.BranchManagement.Dto.CreateOrUpdateBranchDto.Name"> |
||||
|
<summary> |
||||
|
分支名称 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.BranchManagement.Dto.CreateOrUpdateBranchDto.Sort"> |
||||
|
<summary> |
||||
|
分类 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.BranchManagement.Dto.CreateOrUpdateBranchDto.Enabled"> |
||||
|
<summary> |
||||
|
是否可用 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.BranchManagement.Dto.CreateOrUpdateBranchDto.Roles"> |
||||
|
<summary> |
||||
|
对应的角色列表 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="T:BaseService.BaseData.BranchManagement.Dto.GetBranchInputDto"> |
||||
|
<summary> |
||||
|
获取分支信息 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.BranchManagement.Dto.GetBranchInputDto.Id"> |
||||
|
<summary> |
||||
|
传入分支ID |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.BranchManagement.Dto.GetBranchInputDto.Filter"> |
||||
|
<summary> |
||||
|
过滤条件 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.BranchManagement.Dto.GetBranchInputDto.Pid"> |
||||
|
<summary> |
||||
|
子分支ID |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.UserBranchRoleManagement.Dto.CreateOrUpdateUserBranchRoleDto.Id"> |
||||
|
<summary> |
||||
|
自身的GUID |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.UserBranchRoleManagement.Dto.CreateOrUpdateUserBranchRoleDto.TenantId"> |
||||
|
<summary> |
||||
|
租户 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.UserBranchRoleManagement.Dto.CreateOrUpdateUserBranchRoleDto.UserId"> |
||||
|
<summary> |
||||
|
用户ID |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.UserBranchRoleManagement.Dto.CreateOrUpdateUserBranchRoleDto.BranchId"> |
||||
|
<summary> |
||||
|
分支ID |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.UserBranchRoleManagement.Dto.CreateOrUpdateUserBranchRoleDto.RoleId"> |
||||
|
<summary> |
||||
|
角色ID |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.UserBranchRoleManagement.Dto.UserBranchRoleDto.TenantId"> |
||||
|
<summary> |
||||
|
租户 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.UserBranchRoleManagement.Dto.UserBranchRoleDto.UserId"> |
||||
|
<summary> |
||||
|
用户ID |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.UserBranchRoleManagement.Dto.UserBranchRoleDto.UserIdToName"> |
||||
|
<summary> |
||||
|
用户名称 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.UserBranchRoleManagement.Dto.UserBranchRoleDto.BranchId"> |
||||
|
<summary> |
||||
|
分支ID |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.UserBranchRoleManagement.Dto.UserBranchRoleDto.BranchIdToName"> |
||||
|
<summary> |
||||
|
分支机构名称 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.UserBranchRoleManagement.Dto.UserBranchRoleDto.RoleId"> |
||||
|
<summary> |
||||
|
角色ID |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.BaseData.UserBranchRoleManagement.Dto.UserBranchRoleDto.RoleIdToName"> |
||||
|
<summary> |
||||
|
角色名称 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="T:BaseService.BaseData.UserBranchRoleManagement.IUserBranchRoleAppService"> |
||||
|
<summary> |
||||
|
用户--分支--角色 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.RelationBaseData.BranchAndRole.Dto.MyBranchUnitRoleDto.TenantId"> |
||||
|
<summary> |
||||
|
TenantId of this entity. |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.RelationBaseData.BranchAndRole.Dto.MyBranchUnitRoleDto.RoleId"> |
||||
|
<summary> |
||||
|
Id of the Role. |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.RelationBaseData.BranchAndRole.Dto.MyBranchUnitRoleDto.BranchUnitId"> |
||||
|
<summary> |
||||
|
Id of the <see cref="!:BranchUnit"/>. |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.RelationBaseData.BranchAndRole.Dto.BranchUnitPermissionDto.BranchId"> |
||||
|
<summary> |
||||
|
分支ID |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.RelationBaseData.BranchAndRole.Dto.BranchUnitPermissionDto.BranchIdToName"> |
||||
|
<summary> |
||||
|
分支机构名称 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.RelationBaseData.BranchAndRole.Dto.BranchUnitPermissionDto.PermissName"> |
||||
|
<summary> |
||||
|
权限名称 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="P:BaseService.RelationBaseData.BranchAndRole.Dto.BranchUnitPermissionDto.ProviderKey"> |
||||
|
<summary> |
||||
|
角色名称 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="T:BaseService.RelationData.IBranchRelationAppService"> |
||||
|
<summary> |
||||
|
分支接口:无权限设置调用 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IBranchRelationAppService.GetAll(BaseService.BaseData.BranchManagement.Dto.GetBranchInputDto)"> |
||||
|
<summary> |
||||
|
获取所有分支 |
||||
|
</summary> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IBranchRelationAppService.LoadAll(System.Nullable{System.Guid},System.String)"> |
||||
|
<summary> |
||||
|
加载所有分支 |
||||
|
</summary> |
||||
|
<param name="id"></param> |
||||
|
<param name="filter"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IBranchRelationAppService.LoadAllNodes"> |
||||
|
<summary> |
||||
|
加载所有分支子节点 |
||||
|
</summary> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IBranchRelationAppService.Get(System.Guid)"> |
||||
|
<summary> |
||||
|
获取单条分支信息 |
||||
|
</summary> |
||||
|
<param name="id"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IBranchRelationAppService.Create(BaseService.BaseData.BranchManagement.Dto.CreateOrUpdateBranchDto)"> |
||||
|
<summary> |
||||
|
创建分支信息 |
||||
|
</summary> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IBranchRelationAppService.Update(System.Guid,BaseService.BaseData.BranchManagement.Dto.CreateOrUpdateBranchDto)"> |
||||
|
<summary> |
||||
|
更新分支信息 |
||||
|
</summary> |
||||
|
<param name="id"></param> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IBranchRelationAppService.Delete(System.Collections.Generic.List{System.Guid})"> |
||||
|
<summary> |
||||
|
删除分支信息 |
||||
|
</summary> |
||||
|
<param name="ids"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="T:BaseService.RelationData.IUserRelationAppService"> |
||||
|
<summary> |
||||
|
用户信息:无权限设置 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IUserRelationAppService.Get(System.Guid)"> |
||||
|
<summary> |
||||
|
根据ID获取单条信息 |
||||
|
</summary> |
||||
|
<param name="id"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IUserRelationAppService.GetCurrentUserInfo"> |
||||
|
<summary> |
||||
|
获取当前登录用户信息 |
||||
|
</summary> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IUserRelationAppService.GetAll(Volo.Abp.Identity.GetIdentityUsersInput)"> |
||||
|
<summary> |
||||
|
获取所有用户信息 |
||||
|
</summary> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IUserRelationAppService.LoadAllBranchesByUserId(System.Guid)"> |
||||
|
<summary> |
||||
|
根据分支ID获取用户信息 |
||||
|
</summary> |
||||
|
<param name="rolesbyuserId"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IUserRelationAppService.GetAuthConfigAsync(System.Guid)"> |
||||
|
<summary> |
||||
|
获取权限列表信息 |
||||
|
</summary> |
||||
|
<param name="branchId"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IUserRelationAppService.LoadAllCurrentUserBranches"> |
||||
|
<summary> |
||||
|
获取当前登录用户的所有分支信息 |
||||
|
</summary> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.RelationData.IUserRelationAppService.ResetPasswordCurrentUser(System.Guid)"> |
||||
|
<summary> |
||||
|
重置当前登录用户的密码 |
||||
|
</summary> |
||||
|
<param name="id"></param> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.Systems.UserManagement.IUserAppService.Get(System.Guid)"> |
||||
|
<summary> |
||||
|
根据ID获取单条信息 |
||||
|
</summary> |
||||
|
<param name="id"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.Systems.UserManagement.IUserAppService.GetCurrentUserInfo"> |
||||
|
<summary> |
||||
|
获取当前登录用户信息 |
||||
|
</summary> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.Systems.UserManagement.IUserAppService.Create(Volo.Abp.Identity.IdentityUserCreateDto)"> |
||||
|
<summary> |
||||
|
创建用户 |
||||
|
</summary> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.Systems.UserManagement.IUserAppService.UpdateAsync(System.Guid,Volo.Abp.Identity.IdentityUserUpdateDto)"> |
||||
|
<summary> |
||||
|
更新用户信息 |
||||
|
</summary> |
||||
|
<param name="id"></param> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.Systems.UserManagement.IUserAppService.GetAll(Volo.Abp.Identity.GetIdentityUsersInput)"> |
||||
|
<summary> |
||||
|
获取所有用户信息 |
||||
|
</summary> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.Systems.UserManagement.IUserAppService.LoadAllBranchesByUserId(System.Guid)"> |
||||
|
<summary> |
||||
|
根据分支ID获取用户信息 |
||||
|
</summary> |
||||
|
<param name="rolesbyuserId"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.Systems.UserManagement.IUserAppService.GetAuthConfigAsync(System.Guid)"> |
||||
|
<summary> |
||||
|
获取权限列表信息 |
||||
|
</summary> |
||||
|
<param name="branchId"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.Systems.UserManagement.IUserAppService.LoadAllCurrentUserBranches"> |
||||
|
<summary> |
||||
|
获取当前登录用户的所有分支信息 |
||||
|
</summary> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.Systems.UserManagement.IUserAppService.ResetPasswordCurrentUser(System.Guid)"> |
||||
|
<summary> |
||||
|
重置当前登录用户的密码 |
||||
|
</summary> |
||||
|
<param name="id"></param> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
</members> |
||||
|
</doc> |
@ -0,0 +1,15 @@ |
|||||
|
using Volo.Abp.Application; |
||||
|
using Volo.Abp.Modularity; |
||||
|
using Volo.Abp.PermissionManagement; |
||||
|
|
||||
|
namespace BaseService |
||||
|
{ |
||||
|
[DependsOn( |
||||
|
typeof(BaseServiceDomainModule), |
||||
|
typeof(AbpDddApplicationModule), |
||||
|
typeof(AbpPermissionManagementApplicationContractsModule) |
||||
|
)] |
||||
|
public class BaseServiceApplicationContractsModule : AbpModule |
||||
|
{ |
||||
|
} |
||||
|
} |
@ -0,0 +1,35 @@ |
|||||
|
using BaseService.Localization; |
||||
|
using Volo.Abp.Authorization.Permissions; |
||||
|
using Volo.Abp.Localization; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
|
||||
|
namespace BaseService.Permissions |
||||
|
{ |
||||
|
public class BaseServicePermissionDefinitionProvider : PermissionDefinitionProvider |
||||
|
{ |
||||
|
|
||||
|
public override void Define(IPermissionDefinitionContext context) |
||||
|
{ |
||||
|
var baseService = context.AddGroup(BaseServicePermissions.BaseService, L("BaseService"), MultiTenancySides.Tenant); |
||||
|
|
||||
|
var auditLogging = baseService.AddPermission(BaseServicePermissions.AuditLogging.Default, L("AuditLogging")); |
||||
|
|
||||
|
|
||||
|
var branch = baseService.AddPermission(BaseServicePermissions.Branch.Default,L("Branch")); |
||||
|
branch.AddChild(BaseServicePermissions.Branch.Update, L("Edit")); |
||||
|
branch.AddChild(BaseServicePermissions.Branch.Delete, L("Delete")); |
||||
|
branch.AddChild(BaseServicePermissions.Branch.Create, L("Create")); |
||||
|
|
||||
|
var userBranch = baseService.AddPermission(BaseServicePermissions.UserBranch.Default, L("UserBranch")); |
||||
|
userBranch.AddChild(BaseServicePermissions.UserBranch.Update, L("Edit")); |
||||
|
userBranch.AddChild(BaseServicePermissions.UserBranch.Delete, L("Delete")); |
||||
|
userBranch.AddChild(BaseServicePermissions.UserBranch.Create, L("Create")); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
private static LocalizableString L(string name) |
||||
|
{ |
||||
|
return LocalizableString.Create<BaseServiceResource>(name); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,34 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
|
||||
|
namespace BaseService.Permissions |
||||
|
{ |
||||
|
public static class BaseServicePermissions |
||||
|
{ |
||||
|
public const string BaseService = "BaseService"; |
||||
|
|
||||
|
public static class AuditLogging |
||||
|
{ |
||||
|
public const string Default = BaseService + ".AuditLogging"; |
||||
|
} |
||||
|
|
||||
|
public static class Branch |
||||
|
{ |
||||
|
public const string Default = BaseService + ".Branch"; |
||||
|
public const string Delete = Default + ".Delete"; |
||||
|
public const string Update = Default + ".Update"; |
||||
|
public const string Create = Default + ".Create"; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
public static class UserBranch |
||||
|
{ |
||||
|
public const string Default = BaseService + ".UserBranch"; |
||||
|
public const string Delete = Default + ".Delete"; |
||||
|
public const string Update = Default + ".Update"; |
||||
|
public const string Create = Default + ".Create"; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,28 @@ |
|||||
|
using System; |
||||
|
|
||||
|
namespace BaseService.RelationData.Dto |
||||
|
{ |
||||
|
public class BranchPermissionDto |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 分支ID
|
||||
|
/// </summary>
|
||||
|
public Guid BranchId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 分支机构名称
|
||||
|
/// </summary>
|
||||
|
public string BranchIdToName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 权限名称
|
||||
|
/// </summary>
|
||||
|
public string PermissName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 角色名称
|
||||
|
/// </summary>
|
||||
|
public string ProviderKey { get; set; } |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,30 @@ |
|||||
|
using System; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using Volo.Abp.Domain.Entities.Auditing; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
|
||||
|
namespace BaseService.RelationData.Dto |
||||
|
{ |
||||
|
public class BranchRoleDto : CreationAuditedEntity |
||||
|
{ |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Id of the Role.
|
||||
|
/// </summary>
|
||||
|
public Guid RoleId { get; set; } |
||||
|
|
||||
|
public string RoleName { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Id of the <see cref="Branch"/>.
|
||||
|
/// </summary>
|
||||
|
public Guid BranchId { get; set; } |
||||
|
|
||||
|
public string BranchName { get; set; } |
||||
|
|
||||
|
public override object[] GetKeys() |
||||
|
{ |
||||
|
return new object[] { BranchId, RoleId }; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,67 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using BaseService.BaseData.BranchManagement.Dto; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Volo.Abp.Application.Services; |
||||
|
using Volo.Abp.Identity; |
||||
|
|
||||
|
namespace BaseService.RelationData |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 分支接口:无权限设置调用
|
||||
|
/// </summary>
|
||||
|
public interface IBranchRelationAppService : IApplicationService |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 获取所有分支
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task<PagedResultDto<BranchDto>> GetPagedAsync(GetBranchInputDto input); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 加载所有分支
|
||||
|
/// </summary>
|
||||
|
/// <param name="id"></param>
|
||||
|
/// <param name="filter"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task<ListResultDto<BranchDto>> GetChildrenAsync(Guid? id, string filter); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 加载所有分支子节点
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
Task<ListResultDto<BranchDto>> GetAllAsync(); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取单条分支信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="id"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task<BranchDto> GetAsync(Guid id); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建分支信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task<BranchDto> CreateAsync(CreateOrUpdateBranchDto input); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 更新分支信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="id"></param>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task<BranchDto> UpdateAsync(Guid id, CreateOrUpdateBranchDto input); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 删除分支信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="ids"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task DeleteAsync(List<Guid> ids); |
||||
|
} |
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
|
||||
|
namespace BaseService.Systems.AuditLoggingManagement.Dto |
||||
|
{ |
||||
|
public class AuditLogActionDto : EntityDto<Guid> |
||||
|
{ |
||||
|
public Guid? TenantId { get; set; } |
||||
|
|
||||
|
public Guid AuditLogId { get; set; } |
||||
|
|
||||
|
public string ServiceName { get; set; } |
||||
|
|
||||
|
public string MethodName { get; set; } |
||||
|
|
||||
|
public string Parameters { get; set; } |
||||
|
|
||||
|
public DateTime ExecutionTime { get; set; } |
||||
|
|
||||
|
public int ExecutionDuration { get; set; } |
||||
|
|
||||
|
public Dictionary<string, object> ExtraProperties { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,53 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Collections.ObjectModel; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
|
||||
|
namespace BaseService.Systems.AuditLoggingManagement.Dto |
||||
|
{ |
||||
|
public class AuditLogDto : EntityDto<Guid> |
||||
|
{ |
||||
|
public virtual string ApplicationName { get; set; } |
||||
|
|
||||
|
public virtual Guid? UserId { get; set; } |
||||
|
|
||||
|
public virtual string UserName { get; set; } |
||||
|
|
||||
|
public virtual Guid? TenantId { get; set; } |
||||
|
|
||||
|
public virtual string TenantName { get; set; } |
||||
|
|
||||
|
public virtual Guid? ImpersonatorUserId { get; set; } |
||||
|
|
||||
|
public virtual Guid? ImpersonatorTenantId { get; set; } |
||||
|
|
||||
|
public virtual DateTime ExecutionTime { get; set; } |
||||
|
|
||||
|
public virtual int ExecutionDuration { get; set; } |
||||
|
|
||||
|
public virtual string ClientIpAddress { get; set; } |
||||
|
|
||||
|
public virtual string ClientName { get; set; } |
||||
|
|
||||
|
public virtual string ClientId { get; set; } |
||||
|
|
||||
|
public virtual string CorrelationId { get; set; } |
||||
|
|
||||
|
public virtual string BrowserInfo { get; set; } |
||||
|
|
||||
|
public virtual string HttpMethod { get; set; } |
||||
|
|
||||
|
public virtual string Url { get; set; } |
||||
|
|
||||
|
public virtual string Exceptions { get; set; } |
||||
|
|
||||
|
public virtual string Comments { get; set; } |
||||
|
|
||||
|
public virtual int? HttpStatusCode { get; set; } |
||||
|
public virtual Dictionary<string, object> ExtraProperties { get; set; } |
||||
|
|
||||
|
public virtual Collection<EntityChangeDto> EntityChanges { get; protected set; } |
||||
|
|
||||
|
public virtual Collection<AuditLogActionDto> Actions { get; protected set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,29 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Collections.ObjectModel; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Volo.Abp.Auditing; |
||||
|
|
||||
|
namespace BaseService.Systems.AuditLoggingManagement.Dto |
||||
|
{ |
||||
|
public class EntityChangeDto : EntityDto<Guid> |
||||
|
{ |
||||
|
public Guid AuditLogId { get; set; } |
||||
|
|
||||
|
public Guid? TenantId { get; set; } |
||||
|
|
||||
|
public DateTime ChangeTime { get; set; } |
||||
|
|
||||
|
public EntityChangeType ChangeType { get; set; } |
||||
|
|
||||
|
public Guid? EntityTenantId { get; set; } |
||||
|
|
||||
|
public string EntityId { get; set; } |
||||
|
|
||||
|
public string EntityTypeFullName { get; set; } |
||||
|
|
||||
|
public Collection<EntityPropertyChangeDto> PropertyChanges { get; set; } |
||||
|
|
||||
|
public Dictionary<string, object> ExtraProperties { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
using System; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
|
||||
|
namespace BaseService.Systems.AuditLoggingManagement.Dto |
||||
|
{ |
||||
|
public class EntityPropertyChangeDto : EntityDto<Guid> |
||||
|
{ |
||||
|
public Guid? TenantId { get; set; } |
||||
|
|
||||
|
public Guid EntityChangeId { get; set; } |
||||
|
|
||||
|
public string NewValue { get; set; } |
||||
|
|
||||
|
public string OriginalValue { get; set; } |
||||
|
|
||||
|
public string PropertyName { get; set; } |
||||
|
|
||||
|
public string PropertyTypeFullName { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,28 @@ |
|||||
|
using System.Net; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
|
||||
|
namespace BaseService.Systems.AuditLoggingManagement.Dto |
||||
|
{ |
||||
|
public class GetAuditLogsInput : PagedResultRequestDto, IPagedAndSortedResultRequest, IPagedResultRequest, ILimitedResultRequest |
||||
|
{ |
||||
|
public string Sorting { get; set; } |
||||
|
|
||||
|
public string Url { get; set; } |
||||
|
|
||||
|
public string UserName { get; set; } |
||||
|
|
||||
|
public string ApplicationName { get; set; } |
||||
|
public string CorrelationId { get; set; } |
||||
|
|
||||
|
public string HttpMethod { get; set; } |
||||
|
|
||||
|
public HttpStatusCode? HttpStatusCode { get; set; } |
||||
|
|
||||
|
public int? MaxExecutionDuration { get; set; } |
||||
|
|
||||
|
|
||||
|
public int? MinExecutionDuration { get; set; } |
||||
|
|
||||
|
public bool HasException { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,11 @@ |
|||||
|
using System; |
||||
|
|
||||
|
namespace BaseService.Systems.AuditLoggingManagement.Dto |
||||
|
{ |
||||
|
public class GetAverageExecutionDurationPerDayInput |
||||
|
{ |
||||
|
public DateTime StartDate { get; set; } |
||||
|
|
||||
|
public DateTime EndDate { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,10 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
|
||||
|
namespace BaseService.Systems.AuditLoggingManagement.Dto |
||||
|
{ |
||||
|
public class GetAverageExecutionDurationPerDayOutput |
||||
|
{ |
||||
|
public Dictionary<DateTime, double> Data { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,19 @@ |
|||||
|
using BaseService.Systems.AuditLoggingManagement.Dto; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Volo.Abp.Application.Services; |
||||
|
|
||||
|
namespace BaseService.Systems.AuditLoggingManagement |
||||
|
{ |
||||
|
public interface IAuditLoggingAppService : IApplicationService |
||||
|
{ |
||||
|
Task<AuditLogDto> Get(Guid id); |
||||
|
|
||||
|
Task<PagedResultDto<AuditLogDto>> GetAll(GetAuditLogsInput input); |
||||
|
|
||||
|
Task<GetAverageExecutionDurationPerDayOutput> GetAverageExecutionDurationPerDay(GetAverageExecutionDurationPerDayInput input); |
||||
|
} |
||||
|
} |
@ -0,0 +1,75 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using BaseService.BaseData.Permissions.Dto; |
||||
|
using BaseService.RelationData.Dto; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Volo.Abp.Application.Services; |
||||
|
using Volo.Abp.Identity; |
||||
|
|
||||
|
namespace BaseService.Systems.UserManagement |
||||
|
{ |
||||
|
public interface IUserAppService : IApplicationService |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 根据ID获取单条信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="id"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task<IdentityUserDto> GetAsync(Guid id); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取当前登录用户信息
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
Task<IdentityUserDto> GetCurrentUserAsync(); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 创建用户
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task<IdentityUserDto> CreateAsync(IdentityUserCreateDto input); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 更新用户信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="id"></param>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task<IdentityUserDto> UpdateAsync(Guid id, IdentityUserUpdateDto input); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取所有用户信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task<PagedResultDto<IdentityUserDto>> GetAll(GetIdentityUsersInput input); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 根据分支ID获取用户信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="userId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task<ListResultDto<BranchRoleDto>> GetUserBranchesAsync(Guid userId); |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取权限列表信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="branchId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
Task<ApplicationAuthes> GetAuthConfigAsync(Guid branchId); |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 重置当前登录用户的密码
|
||||
|
/// </summary>
|
||||
|
/// <param name="id"></param>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
//Task<IdentityUserDto> ResetPasswordCurrentUser(Guid id, IdentityUserCreateDto input);
|
||||
|
Task<IdentityUserDto> ResetPasswordAsync(Guid id); |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk"> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<OutputType>Library</OutputType> |
||||
|
<TargetFramework>net5.0</TargetFramework> |
||||
|
<RootNamespace>BaseService</RootNamespace> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" /> |
||||
|
<PackageReference Include="Volo.Abp.AutoMapper" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.Identity.Application" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.PermissionManagement.Application" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.Settings" Version="4.3.3" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\..\..\Shared\Win.Sfs.Shared\Win.Sfs.Shared.csproj" /> |
||||
|
<ProjectReference Include="..\..\..\Shared\Win.Utils\Win.Utils.csproj" /> |
||||
|
<ProjectReference Include="..\BaseService.Application.Contracts\BaseService.Application.Contracts.csproj" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
</Project> |
@ -0,0 +1,29 @@ |
|||||
|
using AutoMapper; |
||||
|
using BaseService.BaseData; |
||||
|
using BaseService.RelationBaseData; |
||||
|
using BaseService.Systems.AuditLoggingManagement.Dto; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
using BaseService.BaseData.BranchManagement.Dto; |
||||
|
using BaseService.BaseData.UserBranchRoleManagement.Dto; |
||||
|
using BaseService.RelationData.Dto; |
||||
|
|
||||
|
namespace BaseService |
||||
|
{ |
||||
|
public class BaseServiceApplicationAutoMapperProfile : Profile |
||||
|
{ |
||||
|
public BaseServiceApplicationAutoMapperProfile() |
||||
|
{ |
||||
|
|
||||
|
CreateMap<Branch, BranchDto>() |
||||
|
.ForMember(dto => dto.Label, opt => opt.MapFrom(src => src.Name)); |
||||
|
|
||||
|
//用户--分支
|
||||
|
CreateMap<UserBranch, UserBranchDto>(); |
||||
|
|
||||
|
//分支--角色
|
||||
|
CreateMap<BranchRole, BranchRoleDto>(); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,33 @@ |
|||||
|
using Volo.Abp.AutoMapper; |
||||
|
using Volo.Abp.Identity; |
||||
|
using Volo.Abp.Json; |
||||
|
using Volo.Abp.Modularity; |
||||
|
using Volo.Abp.PermissionManagement; |
||||
|
|
||||
|
namespace BaseService |
||||
|
{ |
||||
|
[DependsOn( |
||||
|
typeof(BaseServiceApplicationContractsModule), |
||||
|
typeof(AbpPermissionManagementApplicationModule), |
||||
|
typeof(AbpIdentityApplicationModule), |
||||
|
typeof(AbpAutoMapperModule) |
||||
|
)] |
||||
|
public class BaseServiceApplicationModule : AbpModule |
||||
|
{ |
||||
|
public override void ConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
Configure<AbpAutoMapperOptions>(options => |
||||
|
{ |
||||
|
options.AddMaps<BaseServiceApplicationAutoMapperProfile>(); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public override void PreConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
PreConfigure<AbpJsonOptions>(option => |
||||
|
{ |
||||
|
option.UseHybridSerializer = false; |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,314 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Linq.Dynamic.Core; |
||||
|
using System.Threading.Tasks; |
||||
|
using BaseService.BaseData.BranchManagement.Dto; |
||||
|
using BaseService.BaseData.UserBranchRoleManagement.Dto; |
||||
|
using BaseService.Permissions; |
||||
|
using BaseService.RelationBaseData; |
||||
|
using BaseService.RelationData.Dto; |
||||
|
using Microsoft.AspNetCore.Authorization; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Volo.Abp.Application.Services; |
||||
|
using Volo.Abp.Caching; |
||||
|
using Volo.Abp.Domain.Repositories; |
||||
|
using Volo.Abp.Identity; |
||||
|
using Win.Sfs.Shared.CacheBase; |
||||
|
|
||||
|
namespace BaseService.BaseData.BranchManagement |
||||
|
{ |
||||
|
[Route("api/base/branch")] |
||||
|
[Authorize(BaseServicePermissions.Branch.Default)] |
||||
|
public class BranchAppService : ApplicationService, IBranchAppService |
||||
|
{ |
||||
|
private readonly IRepository<Branch, Guid> _repository; |
||||
|
private readonly IRepository<UserBranch> _repositoryBranchRole; |
||||
|
public IIdentityRoleRepository RoleRepository { get; } |
||||
|
|
||||
|
private readonly IDistributedCache<Branch> _cache; |
||||
|
public BranchAppService(IRepository<Branch, Guid> repository, |
||||
|
IRepository<UserBranch> repositoryBranchRole, |
||||
|
IDistributedCache<Branch> cache, |
||||
|
IIdentityRoleRepository roleRepository) |
||||
|
{ |
||||
|
_repository = repository; |
||||
|
_repositoryBranchRole = repositoryBranchRole; |
||||
|
RoleRepository = roleRepository; |
||||
|
_cache = cache; |
||||
|
} |
||||
|
[HttpPost] |
||||
|
[Authorize(BaseServicePermissions.Branch.Create)] |
||||
|
public virtual async Task<BranchDto> CreateAsync(CreateOrUpdateBranchDto input) |
||||
|
{ |
||||
|
var exist = await _repository.FirstOrDefaultAsync(_ => _.Name == input.Name); |
||||
|
if (exist != null) throw new BusinessException("名称:" + input.Name + "机构已存在"); |
||||
|
|
||||
|
var branch = new Branch(GuidGenerator.Create(), |
||||
|
CurrentTenant.Id, |
||||
|
input.CategoryId, |
||||
|
input.Pid, |
||||
|
input.Name, |
||||
|
"", |
||||
|
input.Sort, |
||||
|
true, |
||||
|
input.Enabled |
||||
|
); |
||||
|
var parent = await _repository.FirstOrDefaultAsync(_ => _.Id == input.Pid); |
||||
|
ChangeOrganizationModel(branch, parent); |
||||
|
await _repository.InsertAsync(branch); |
||||
|
|
||||
|
//create cache
|
||||
|
await _cache.SetAsync(branch.Id.ToString(), branch, CacheStrategyConst.FIVE_MINUTES); |
||||
|
|
||||
|
return ObjectMapper.Map<Branch, BranchDto>(branch); |
||||
|
} |
||||
|
|
||||
|
[HttpPost] |
||||
|
[Route("delete")] |
||||
|
[Authorize(BaseServicePermissions.Branch.Delete)] |
||||
|
public virtual async Task DeleteAsync(List<Guid> ids) |
||||
|
{ |
||||
|
foreach (var id in ids) |
||||
|
{ |
||||
|
var branch = await _repository.GetAsync(id); |
||||
|
await _repository.DeleteAsync(_ => _.CascadeId.Contains(branch.CascadeId)); |
||||
|
await _cache.DeleteAsync(id.ToString()); |
||||
|
await _repository.DeleteAsync(_ => _.Id == id); |
||||
|
} |
||||
|
} |
||||
|
[HttpGet] |
||||
|
[Route("{id}")] |
||||
|
[AllowAnonymous] |
||||
|
public virtual async Task<BranchDto> GetAsync(Guid id) |
||||
|
{ |
||||
|
var result = await GetFromCacheAsync(id); |
||||
|
return ObjectMapper.Map<Branch, BranchDto>(result); |
||||
|
} |
||||
|
|
||||
|
protected virtual async Task<Branch> GetFromCacheAsync(Guid id) |
||||
|
{ |
||||
|
var result = await _cache.GetOrAddAsync( |
||||
|
id.ToString(), |
||||
|
async () => await GetFromRepository(id), |
||||
|
CacheStrategyConst.FIVE_MINUTES); |
||||
|
|
||||
|
return result; |
||||
|
} |
||||
|
|
||||
|
private async Task<Branch> GetFromRepository(Guid id) |
||||
|
{ |
||||
|
return await _repository.GetAsync(id); |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
[Route("paged")] |
||||
|
public virtual async Task<PagedResultDto<BranchDto>> GetPagedListAsync(GetBranchInputDto input) |
||||
|
{ |
||||
|
var query = _repository |
||||
|
.WhereIf(!string.IsNullOrWhiteSpace(input.Filter), _ => _.Name.Contains(input.Filter)) |
||||
|
.WhereIf(input.CategoryId.HasValue, _ => _.CategoryId == input.CategoryId); |
||||
|
if (input.Id.HasValue) |
||||
|
{ |
||||
|
var org = await _repository.GetAsync(input.Id.Value); |
||||
|
query = query.Where(_ => _.CascadeId.Contains(org.CascadeId)); |
||||
|
} |
||||
|
|
||||
|
var items = await query.OrderBy(input.Sorting ?? "Sort") |
||||
|
.Skip(input.SkipCount) |
||||
|
.Take(input.MaxResultCount) |
||||
|
.ToListAsync(); |
||||
|
var totalCount = await query.CountAsync(); |
||||
|
|
||||
|
var dtos = ObjectMapper.Map<List<Branch>, List<BranchDto>>(items); |
||||
|
return new PagedResultDto<BranchDto>(totalCount, dtos); |
||||
|
//var query = _repository
|
||||
|
// .WhereIf(!string.IsNullOrWhiteSpace(input.Filter), _ => _.Name.Contains(input.Filter))
|
||||
|
// .WhereIf(input.CategoryId.HasValue, _ => _.CategoryId == input.CategoryId);
|
||||
|
|
||||
|
//var items = await query.OrderBy(input.Sorting ?? "Sort")
|
||||
|
// .Skip(input.SkipCount)
|
||||
|
// .Take(input.MaxResultCount)
|
||||
|
// .ToListAsync();
|
||||
|
//var totalCount = await query.CountAsync();
|
||||
|
|
||||
|
//var dtos = ObjectMapper.Map<List<Branch>, List<BranchDto>>(items);
|
||||
|
//return new PagedResultDto<BranchDto>(totalCount, dtos);
|
||||
|
} |
||||
|
[HttpGet] |
||||
|
[Route("all")] |
||||
|
public virtual async Task<ListResultDto<BranchDto>> GetAllAsync(Guid? id, string filter) |
||||
|
{ |
||||
|
var items = new List<Branch>(); |
||||
|
if (!string.IsNullOrWhiteSpace(filter)) |
||||
|
{ |
||||
|
items = await _repository.Where(_ => _.Name.Contains(filter)).ToListAsync(); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
var query = id.HasValue ? _repository.Where(_ => _.Pid == id) : |
||||
|
_repository.Where(_ => _.Pid == null); |
||||
|
items = await query.ToListAsync(); |
||||
|
} |
||||
|
|
||||
|
var dtos = ObjectMapper.Map<List<Branch>, List<BranchDto>>(items); |
||||
|
return new ListResultDto<BranchDto>(dtos); |
||||
|
} |
||||
|
[HttpGet] |
||||
|
[Route("children")] |
||||
|
public virtual async Task<ListResultDto<BranchDto>> GetChildrenAsync() |
||||
|
{ |
||||
|
var items = await _repository.GetListAsync(); |
||||
|
|
||||
|
var dtos = ObjectMapper.Map<List<Branch>, List<BranchDto>>(items); |
||||
|
return new ListResultDto<BranchDto>(dtos); |
||||
|
} |
||||
|
[HttpPut] |
||||
|
[Route("{id}")] |
||||
|
[Authorize(BaseServicePermissions.Branch.Update)] |
||||
|
public virtual async Task<BranchDto> UpdateAsync(Guid id, CreateOrUpdateBranchDto input) |
||||
|
{ |
||||
|
if (input.Pid == id) throw new BusinessException("机构上级不能为当前机构!"); |
||||
|
var branch = await _repository.FirstOrDefaultAsync(_ => _.Id == id); |
||||
|
if (branch.Pid != input.Pid) |
||||
|
{ |
||||
|
var parent = await _repository.FirstOrDefaultAsync(_ => _.Id == input.Pid); |
||||
|
var orgs = await _repository.Where(_ => _.CascadeId.Contains(branch.CascadeId) && _.Id != branch.Id) |
||||
|
.OrderBy(_ => _.CascadeId).ToListAsync(); |
||||
|
branch.Pid = input.Pid; |
||||
|
ChangeOrganizationModel(branch, parent); |
||||
|
foreach (var org in orgs) |
||||
|
{ |
||||
|
if (org.Pid == branch.Id) |
||||
|
{ |
||||
|
ChangeOrganizationModel(org, branch, false); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
var orgParent = orgs.FirstOrDefault(_ => _.Id == org.Pid); |
||||
|
ChangeOrganizationModel(org, orgParent, false); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
branch.Name = input.Name; |
||||
|
branch.Sort = input.Sort; |
||||
|
branch.Enabled = input.Enabled; |
||||
|
|
||||
|
await _cache.SetAsync(id.ToString(), branch, CacheStrategyConst.FIVE_MINUTES); |
||||
|
|
||||
|
return ObjectMapper.Map<Branch, BranchDto>(branch); |
||||
|
} |
||||
|
|
||||
|
private void ChangeOrganizationModel(Branch org, Branch parent, bool checkLevel = true) |
||||
|
{ |
||||
|
var cascadeId = org.CascadeId == null ? 1 : int.Parse(org.CascadeId.TrimEnd('.').Split('.').Last()); |
||||
|
if (checkLevel) |
||||
|
{ |
||||
|
if (parent != null && parent.Leaf) parent.Leaf = false; |
||||
|
var lastLevel = _repository.Where(_ => _.Pid == org.Pid && _.Id != org.Id) |
||||
|
.OrderByDescending(_ => _.CascadeId) |
||||
|
.FirstOrDefault(); |
||||
|
cascadeId = lastLevel == null ? 1 : int.Parse(lastLevel.CascadeId.TrimEnd('.').Split('.').Last()) + 1; |
||||
|
} |
||||
|
|
||||
|
if (org.Pid.HasValue) |
||||
|
{ |
||||
|
if (parent == null) throw new BusinessException("上级机构查询错误!"); |
||||
|
org.CascadeId = parent.CascadeId + cascadeId + "."; |
||||
|
org.FullName = parent.FullName + "/" + org.Name; |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
org.CascadeId = ".0." + cascadeId + "."; |
||||
|
org.FullName = org.Name; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 根据分支ID,查找中间表branch-role
|
||||
|
/// </summary>
|
||||
|
/// <param name="branchId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("{branchId}/roles")] |
||||
|
public virtual async Task<ListResultDto<BranchRoleDto>> GetRolesAsync(Guid branchId) |
||||
|
{ |
||||
|
var dtos = new List<BranchRoleDto>(); |
||||
|
var getRoleIds = await GetRolesByBranchIdAsync(branchId); |
||||
|
var roles = await RoleRepository.GetListAsync(); |
||||
|
if (getRoleIds != null) |
||||
|
{ |
||||
|
foreach (var role in getRoleIds) |
||||
|
{ |
||||
|
dtos.Add(new BranchRoleDto() { RoleId = role.RoleId, RoleName = roles.FirstOrDefault(p => p.Id == role.RoleId)?.Name }); |
||||
|
} |
||||
|
} |
||||
|
return new ListResultDto<BranchRoleDto>(dtos); |
||||
|
} |
||||
|
|
||||
|
protected virtual async Task<List<UserBranchRole>> GetRolesByBranchIdAsync(Guid branchId) |
||||
|
{ |
||||
|
var userBranch = await _repositoryBranchRole.GetAsync(_ => _.BranchId == branchId); |
||||
|
var roles = userBranch.Roles.ToList(); |
||||
|
return roles; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 用于角色管理:分支和角色互动
|
||||
|
/// </summary>
|
||||
|
/// <param name="branchId"></param>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("paged-roles/{branchId}")] |
||||
|
public virtual async Task<PagedResultDto<IdentityRoleDto>> GetPagedRolesAsync(Guid branchId, PagedAndSortedResultRequestDto input) |
||||
|
{ |
||||
|
var listRoles = new List<IdentityRole>(); |
||||
|
var getRoleIds = GetUserRolesAsync(branchId); |
||||
|
if (getRoleIds == null) |
||||
|
{ |
||||
|
throw new BusinessException("未找到分支和角色的关联信息!"); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
var list = await RoleRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount); |
||||
|
foreach (var roleid in getRoleIds) |
||||
|
{ |
||||
|
var filterRole = list.FirstOrDefault(_ => _.Id == roleid.RoleId); |
||||
|
listRoles.Add(filterRole); |
||||
|
} |
||||
|
} |
||||
|
var totalCount = listRoles.Count; |
||||
|
|
||||
|
return new PagedResultDto<IdentityRoleDto>( |
||||
|
totalCount, |
||||
|
ObjectMapper.Map<List<IdentityRole>, List<IdentityRoleDto>>(listRoles) |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
protected virtual List<UserBranchRole> GetUserRolesAsync(Guid branchId) |
||||
|
{ |
||||
|
var dtos = new List<UserBranchRole>(); |
||||
|
var isInRole = _repositoryBranchRole.Where(_ => _.BranchId == branchId); |
||||
|
if (isInRole != null) |
||||
|
{ |
||||
|
foreach (var userRoles in isInRole) |
||||
|
{ |
||||
|
foreach (var role in userRoles.Roles) |
||||
|
{ |
||||
|
dtos.Add(new UserBranchRole() { RoleId = role.RoleId }); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return dtos; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
} |
@ -0,0 +1,413 @@ |
|||||
|
using BaseService.BaseData; |
||||
|
using BaseService.Permissions; |
||||
|
using BaseService.RelationBaseData; |
||||
|
using Microsoft.AspNetCore.Authorization; |
||||
|
using Microsoft.AspNetCore.Identity; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using BaseService.BaseData.Permissions.Dto; |
||||
|
using BaseService.RelationData.Dto; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Volo.Abp.Application.Services; |
||||
|
using Volo.Abp.Authorization; |
||||
|
using Volo.Abp.Authorization.Permissions; |
||||
|
using Volo.Abp.Domain.Repositories; |
||||
|
using Volo.Abp.Identity; |
||||
|
using Volo.Abp.ObjectExtending; |
||||
|
using Volo.Abp.PermissionManagement; |
||||
|
using Volo.Abp.Users; |
||||
|
using IdentityUser = Volo.Abp.Identity.IdentityUser; |
||||
|
|
||||
|
namespace BaseService.Systems.UserManagement |
||||
|
{ |
||||
|
[Route("api/base/user")] |
||||
|
[Authorize(IdentityPermissions.Users.Default)] |
||||
|
public class UserAppService : ApplicationService, IUserAppService |
||||
|
{ |
||||
|
protected IdentityUserManager UserManager { get; } |
||||
|
protected IIdentityUserRepository UserRepository { get; } |
||||
|
public IIdentityRoleRepository RoleRepository { get; } |
||||
|
private readonly IRepository<Branch, Guid> _branchRepository; |
||||
|
|
||||
|
private readonly IRepository<BranchRole> _branchRoleRepository; |
||||
|
|
||||
|
//权限提供者类
|
||||
|
private readonly IAbpAuthorizationPolicyProvider _abpAuthorizationPolicyProvider; |
||||
|
private readonly IAuthorizationService _authorizationService; |
||||
|
|
||||
|
protected ICurrentUser CurrentUsers { get; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 权限列表
|
||||
|
/// </summary>
|
||||
|
protected IPermissionGrantRepository PermissionGrantRepository { get; } |
||||
|
|
||||
|
public UserAppService( |
||||
|
IdentityUserManager userManager, |
||||
|
IIdentityUserRepository userRepository, |
||||
|
IIdentityRoleRepository roleRepository, |
||||
|
IRepository<Branch, Guid> branchRepository, |
||||
|
IRepository<BranchRole> branchRoleRepository, |
||||
|
IAbpAuthorizationPolicyProvider abpAuthorizationPolicyProvider, |
||||
|
IAuthorizationService authorizationService, |
||||
|
ICurrentUser currentUser, |
||||
|
IPermissionGrantRepository permissionGrantRepository) |
||||
|
{ |
||||
|
UserManager = userManager; |
||||
|
UserRepository = userRepository; |
||||
|
RoleRepository = roleRepository; |
||||
|
_branchRepository = branchRepository; |
||||
|
_abpAuthorizationPolicyProvider = abpAuthorizationPolicyProvider; |
||||
|
_authorizationService = authorizationService; |
||||
|
CurrentUsers = currentUser; |
||||
|
PermissionGrantRepository = permissionGrantRepository; |
||||
|
_branchRoleRepository = branchRoleRepository; |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
[Route("{id}")] |
||||
|
public async Task<IdentityUserDto> GetAsync(Guid id) |
||||
|
{ |
||||
|
var dto = ObjectMapper.Map<IdentityUser, IdentityUserDto>(await UserManager.GetByIdAsync(id)); |
||||
|
return dto; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取当前登录用户信息
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("current")] |
||||
|
[AllowAnonymous] |
||||
|
public async Task<IdentityUserDto> GetCurrentUserAsync() |
||||
|
{ |
||||
|
var id = CurrentUser.GetId(); |
||||
|
var currentUser = await UserManager.GetByIdAsync(id); |
||||
|
var dto = ObjectMapper.Map<IdentityUser, IdentityUserDto>(currentUser); |
||||
|
|
||||
|
return dto; |
||||
|
} |
||||
|
|
||||
|
[HttpPost] |
||||
|
[Authorize(IdentityPermissions.Users.Create)] |
||||
|
public async Task<IdentityUserDto> CreateAsync(IdentityUserCreateDto input) |
||||
|
{ |
||||
|
var user = new IdentityUser( |
||||
|
GuidGenerator.Create(), |
||||
|
input.UserName, |
||||
|
input.Email, |
||||
|
CurrentTenant.Id |
||||
|
); |
||||
|
|
||||
|
input.MapExtraPropertiesTo(user); |
||||
|
|
||||
|
(await UserManager.CreateAsync(user, input.Password)).CheckErrors(); |
||||
|
await UpdateAsync(user, input); |
||||
|
|
||||
|
var dto = ObjectMapper.Map<IdentityUser, IdentityUserDto>(user); |
||||
|
|
||||
|
await CurrentUnitOfWork.SaveChangesAsync(); |
||||
|
|
||||
|
return dto; |
||||
|
} |
||||
|
|
||||
|
[HttpPut] |
||||
|
[Route("{id}")] |
||||
|
[Authorize(IdentityPermissions.Users.Update)] |
||||
|
public async Task<IdentityUserDto> UpdateAsync(Guid id, IdentityUserUpdateDto input) |
||||
|
{ |
||||
|
var user = await UserManager.GetByIdAsync(id); |
||||
|
user.ConcurrencyStamp = input.ConcurrencyStamp; |
||||
|
|
||||
|
(await UserManager.SetUserNameAsync(user, input.UserName)).CheckErrors(); |
||||
|
|
||||
|
await UpdateAsync(user, input); |
||||
|
input.MapExtraPropertiesTo(user); |
||||
|
|
||||
|
(await UserManager.UpdateAsync(user)).CheckErrors(); |
||||
|
|
||||
|
if (!input.Password.IsNullOrEmpty()) |
||||
|
{ |
||||
|
(await UserManager.RemovePasswordAsync(user)).CheckErrors(); |
||||
|
(await UserManager.AddPasswordAsync(user, input.Password)).CheckErrors(); |
||||
|
} |
||||
|
|
||||
|
var dto = ObjectMapper.Map<IdentityUser, IdentityUserDto>(user); |
||||
|
|
||||
|
await CurrentUnitOfWork.SaveChangesAsync(); |
||||
|
|
||||
|
return dto; |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
public async Task<PagedResultDto<IdentityUserDto>> GetAll(GetIdentityUsersInput input) |
||||
|
{ |
||||
|
var totalCount = await UserRepository.GetCountAsync(input.Filter); |
||||
|
var items = await UserRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, |
||||
|
input.Filter); |
||||
|
|
||||
|
var dtos = ObjectMapper.Map<List<IdentityUser>, List<IdentityUserDto>>(items); |
||||
|
|
||||
|
return new PagedResultDto<IdentityUserDto>(totalCount, dtos); |
||||
|
} |
||||
|
|
||||
|
[HttpGet] |
||||
|
[Route("update")] |
||||
|
protected virtual async Task UpdateAsync(IdentityUser user, IdentityUserCreateOrUpdateDtoBase input) |
||||
|
{ |
||||
|
if (!string.Equals(user.Email, input.Email, StringComparison.InvariantCultureIgnoreCase)) |
||||
|
{ |
||||
|
(await UserManager.SetEmailAsync(user, input.Email)).CheckErrors(); |
||||
|
} |
||||
|
|
||||
|
if (!string.Equals(user.PhoneNumber, input.PhoneNumber, StringComparison.InvariantCultureIgnoreCase)) |
||||
|
{ |
||||
|
(await UserManager.SetPhoneNumberAsync(user, input.PhoneNumber)).CheckErrors(); |
||||
|
} |
||||
|
|
||||
|
//说明:从3.1升级到3.3后,去掉了TwoFactorEnabled属性
|
||||
|
//(await UserManager.SetTwoFactorEnabledAsync(user, input.TwoFactorEnabled)).CheckErrors();
|
||||
|
(await UserManager.SetLockoutEnabledAsync(user, input.LockoutEnabled)).CheckErrors(); |
||||
|
|
||||
|
user.Name = input.Name; |
||||
|
user.Surname = input.Surname; |
||||
|
|
||||
|
if (input.RoleNames != null) |
||||
|
{ |
||||
|
(await UserManager.SetRolesAsync(user, input.RoleNames)).CheckErrors(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取当前登录用户的分支信息,绑定分支下拉列表项
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("current/branches")] |
||||
|
[AllowAnonymous] |
||||
|
public async Task<List<BranchRoleDto>> GetCurrentUserBranchesAsync() |
||||
|
{ |
||||
|
var branchList = new List<BranchRoleDto>(); |
||||
|
//获取用户的所有分支
|
||||
|
var branchRoles = await GetUserBranchRolesAsync(CurrentUsers.GetId()); |
||||
|
var groupBranchRoles = branchRoles.GroupBy(x => x.BranchId) |
||||
|
.Select(y => new {xx = new {BranchId = y.Key}, items = y}); |
||||
|
foreach (var group in groupBranchRoles |
||||
|
) |
||||
|
{ |
||||
|
var mybranchrole = new BranchRoleDto |
||||
|
{ |
||||
|
BranchId = @group.xx.BranchId, |
||||
|
BranchName = (await _branchRepository.GetListAsync()) |
||||
|
.FirstOrDefault(_ => _.Id == @group.xx.BranchId)?.Name |
||||
|
}; |
||||
|
branchList.Add(mybranchrole); |
||||
|
} |
||||
|
|
||||
|
return branchList; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 根据用户ID,查所有该用户的分支(供用户管理用)
|
||||
|
/// </summary>
|
||||
|
/// <param name="userId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("{userId}/branches")] |
||||
|
public async Task<ListResultDto<BranchRoleDto>> GetUserBranchesAsync(Guid userId) |
||||
|
{ |
||||
|
var branchList = new List<BranchRoleDto>(); |
||||
|
//获取用户的所有分支
|
||||
|
var branchRoles = await GetUserBranchRolesAsync(userId); |
||||
|
var groupBranchRoles = branchRoles.GroupBy(x => x.BranchId) |
||||
|
.Select(y => new {xx = new {BranchId = y.Key}, items = y}); |
||||
|
foreach (var group in groupBranchRoles) |
||||
|
{ |
||||
|
var mybranchrole = new BranchRoleDto |
||||
|
{ |
||||
|
BranchId = @group.xx.BranchId, |
||||
|
BranchName = (await _branchRepository.GetListAsync()) |
||||
|
.FirstOrDefault(_ => _.Id == @group.xx.BranchId) |
||||
|
.Name |
||||
|
}; |
||||
|
branchList.Add(mybranchrole); |
||||
|
} |
||||
|
|
||||
|
return new ListResultDto<BranchRoleDto>(branchList); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 根据用户ID,获取当前登录用户的所有权限信息,带角色名称
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("{userId}/granted-permissions")] |
||||
|
protected virtual async Task<List<PermissionGrant>> GetUserGrantedPermissionsAsync(Guid userId) |
||||
|
{ |
||||
|
// var userRoleNames = (await AppService.GetRolesAsync(id)).Items.Select(r => r.Name).ToList();
|
||||
|
var listPermiss = new List<PermissionGrant>(); |
||||
|
var listRolesName = await UserRepository.GetRoleNamesAsync(userId); |
||||
|
if (listRolesName != null) |
||||
|
{ |
||||
|
foreach (var rolename in listRolesName) |
||||
|
{ |
||||
|
var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync(RolePermissionValueProvider.ProviderName, rolename); |
||||
|
if (permissionGrantsInRole != null) |
||||
|
{ |
||||
|
foreach (var permiss in permissionGrantsInRole) |
||||
|
{ |
||||
|
listPermiss.Add(permiss); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return listPermiss; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取当前用户的组织信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="uid"></param>
|
||||
|
/// <returns></returns>
|
||||
|
protected virtual async Task<List<BranchRoleDto>> GetUserBranchRolesAsync(Guid userId) |
||||
|
{ |
||||
|
var branchList = new List<BranchRole>(); |
||||
|
//获取当前用户的所有角色
|
||||
|
var userRoles = await UserRepository.GetRolesAsync(userId); |
||||
|
if (userRoles == null) |
||||
|
{ |
||||
|
throw new BusinessException("当前登录用户没有任何角色信息,请找管理员进行维护!"); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
//获取所有分支-角色的信息
|
||||
|
var allBranchRoles = await _branchRoleRepository.GetListAsync(); |
||||
|
if (allBranchRoles != null) |
||||
|
{ |
||||
|
foreach (var role in userRoles) |
||||
|
{ |
||||
|
var branchRoles = allBranchRoles.Where(_ => _.RoleId == role.Id).ToList(); |
||||
|
foreach (var branch in branchRoles) |
||||
|
{ |
||||
|
if (branch == null) |
||||
|
continue; //该用户没有角色-分支信息
|
||||
|
var branchRole = new BranchRole(branch.BranchId, role.Id); |
||||
|
branchList.Add(branchRole); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
// Logger.LogDebug("未找到分支和角色的关联信息!");
|
||||
|
throw new BusinessException("未找到分支和角色的关联信息!"); |
||||
|
} |
||||
|
} |
||||
|
var dtos = ObjectMapper.Map<List<BranchRole>, List<BranchRoleDto>>(branchList); |
||||
|
return new List<BranchRoleDto>(dtos); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 重要:根据分支ID,过滤当前登录用户的权限信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="branchId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("{branchId}/auth-config")] |
||||
|
public async Task<ApplicationAuthes> GetAuthConfigAsync(Guid branchId) |
||||
|
{ |
||||
|
var authConfig = new ApplicationAuthes(); |
||||
|
var policyNames = await _abpAuthorizationPolicyProvider.GetPoliciesNamesAsync(); |
||||
|
foreach (var policyName in policyNames) |
||||
|
{ |
||||
|
authConfig.Policies[policyName] = true; |
||||
|
//if (await _authorizationService.IsGrantedAsync(policyName))
|
||||
|
//{
|
||||
|
// authConfig.GrantedPolicies[policyName] = true;
|
||||
|
//}
|
||||
|
} |
||||
|
var userPermissList = new List<BranchPermissionDto>(); |
||||
|
var userId = CurrentUsers.GetId(); |
||||
|
|
||||
|
//获取当前用户的所有权限信息
|
||||
|
var getUserPermissions = await GetUserGrantedPermissionsAsync(userId); |
||||
|
//获取当前用户的所有分支
|
||||
|
var gerUserBranches = await GetUserBranchRolesAsync(userId); |
||||
|
if (gerUserBranches == null) |
||||
|
{ |
||||
|
throw new BusinessException("当前登录用户没有任何分支信息,请找管理员进行维护!"); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
//根据分支ID过滤
|
||||
|
var branchRoles = gerUserBranches.Where(_ => _.BranchId == branchId).ToList(); |
||||
|
if (!branchRoles.Any()) |
||||
|
{ |
||||
|
throw new BusinessException("当前登录用户在分支【" + branchRoles.FirstOrDefault()?.BranchName + "】中不存在!"); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
if (getUserPermissions == null) |
||||
|
{ |
||||
|
throw new BusinessException("当前登录用户没有任何权限信息,请找管理员进行维护!"); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
foreach (var role in branchRoles) |
||||
|
{ |
||||
|
var userPermission = getUserPermissions.Where(_ => _.ProviderKey == role.RoleName); |
||||
|
foreach (var permission in userPermission) |
||||
|
{ |
||||
|
authConfig.GrantedPolicies.Add(permission.Name, true); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return authConfig; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 重置密码功能
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
//[HttpPut]
|
||||
|
//[Route("{userId}/reset-password")]
|
||||
|
//public async Task<IdentityUserDto> ResetPasswordAsync(Guid userId)
|
||||
|
//{
|
||||
|
// var user = await UserManager.FindByIdAsync(userId.ToString());
|
||||
|
// string token = await UserManager.GeneratePasswordResetTokenAsync(user);
|
||||
|
// await UserManager.ResetPasswordAsync(user, token, "1q2w3E*");
|
||||
|
// //await UserManager.ResetPasswordAsync(user, token, "123456");
|
||||
|
// var dto = ObjectMapper.Map<IdentityUser, IdentityUserDto>(user);
|
||||
|
|
||||
|
// return dto;
|
||||
|
//}
|
||||
|
|
||||
|
[HttpPut] |
||||
|
[Route("{userId}/reset-password")] |
||||
|
[Authorize(IdentityPermissions.Users.Update)] |
||||
|
public async Task<IdentityUserDto> ResetPasswordAsync(Guid userId) |
||||
|
{ |
||||
|
var user = await UserManager.FindByIdAsync(userId.ToString()); |
||||
|
//string token = await UserManager.GeneratePasswordResetTokenAsync(user);//err:No IUserTwoFactorTokenProvider<TUser> named 'Default' is registered.
|
||||
|
//await UserManager.ResetPasswordAsync(user, token, "1q2w3E*");
|
||||
|
await UserManager.RemovePasswordAsync(user); |
||||
|
if (user.PasswordHash == null) |
||||
|
{ |
||||
|
(await UserManager.AddPasswordAsync(user, "123456")).CheckErrors(); |
||||
|
} |
||||
|
var dto = ObjectMapper.Map<IdentityUser, IdentityUserDto>(user); |
||||
|
|
||||
|
return dto; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,503 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using BaseService.BaseData; |
||||
|
using BaseService.BaseData.BranchManagement; |
||||
|
using BaseService.BaseData.Permissions.Dto; |
||||
|
using BaseService.BaseData.UserBranchRoleManagement; |
||||
|
using BaseService.BaseData.UserBranchRoleManagement.Dto; |
||||
|
using BaseService.Permissions; |
||||
|
using BaseService.RelationData.Dto; |
||||
|
using BaseService.Systems.UserManagement; |
||||
|
using Microsoft.AspNetCore.Authorization; |
||||
|
using Microsoft.AspNetCore.Mvc; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Application.Dtos; |
||||
|
using Volo.Abp.Application.Services; |
||||
|
using Volo.Abp.Authorization; |
||||
|
using Volo.Abp.Authorization.Permissions; |
||||
|
using Volo.Abp.Domain.Repositories; |
||||
|
using Volo.Abp.Identity; |
||||
|
using Volo.Abp.PermissionManagement; |
||||
|
using Volo.Abp.Users; |
||||
|
|
||||
|
namespace BaseService.UserManagement |
||||
|
{ |
||||
|
[Route("api/base/userbranch")] |
||||
|
//[Authorize(BaseServicePermissions.UserBranch.Default)]
|
||||
|
|
||||
|
public class UserBranchAppService : ApplicationService, IUserBranchAppService |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 角色
|
||||
|
/// </summary>
|
||||
|
protected IIdentityRoleRepository IdentityRoleRepository { get; } |
||||
|
private readonly IBranchAppService _branchAppService; |
||||
|
private readonly IUserAppService _userAppService; |
||||
|
private readonly IRepository<UserBranch, Guid> _repository; |
||||
|
//权限提供者类
|
||||
|
private readonly IAbpAuthorizationPolicyProvider _abpAuthorizationPolicyProvider; |
||||
|
/// <summary>
|
||||
|
/// 当前用户
|
||||
|
/// </summary>
|
||||
|
protected ICurrentUser CurrentUsers { get; } |
||||
|
protected IIdentityUserRepository UserRepository { get; } |
||||
|
/// <summary>
|
||||
|
/// 权限类
|
||||
|
/// </summary>
|
||||
|
protected IPermissionGrantRepository PermissionGrantRepository { get; } |
||||
|
|
||||
|
public UserBranchAppService( |
||||
|
IRepository<UserBranch, Guid> repository, |
||||
|
IIdentityRoleRepository identityRoleRepository, |
||||
|
IAbpAuthorizationPolicyProvider abpAuthorizationPolicyProvider, |
||||
|
ICurrentUser currentUser, |
||||
|
IIdentityUserRepository userRepository, |
||||
|
IPermissionGrantRepository permissionGrantRepository, |
||||
|
IUserAppService userAppService, |
||||
|
IBranchAppService branchAppService) |
||||
|
{ |
||||
|
_repository = repository; |
||||
|
IdentityRoleRepository = identityRoleRepository; |
||||
|
_abpAuthorizationPolicyProvider = abpAuthorizationPolicyProvider; |
||||
|
CurrentUsers = currentUser; |
||||
|
UserRepository = userRepository; |
||||
|
_branchAppService = branchAppService; |
||||
|
_userAppService = userAppService; |
||||
|
PermissionGrantRepository = permissionGrantRepository; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 添加
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost] |
||||
|
[Route("createUpdate")] |
||||
|
//[Authorize(BaseServicePermissions.UserBranch.Create)]
|
||||
|
public virtual async Task CreateUpdateAsync(CreateOrUpdateUserBranchDto input) |
||||
|
{ |
||||
|
var userBranch = await _repository.FirstOrDefaultAsync(_ => _.UserId == input.UserId && _.BranchId == input.BranchId); |
||||
|
if (userBranch == null) |
||||
|
{ |
||||
|
//执行添加操作
|
||||
|
var createUserBranch = new UserBranch(GuidGenerator.Create(), |
||||
|
input.UserId, |
||||
|
input.BranchId |
||||
|
); |
||||
|
var userBranchRoles = input.Roles; |
||||
|
//选择了角色信息
|
||||
|
foreach (var role in userBranchRoles) |
||||
|
{ |
||||
|
createUserBranch.AddRole(role.RoleId); |
||||
|
} |
||||
|
await _repository.InsertAsync(createUserBranch); |
||||
|
ObjectMapper.Map<UserBranch, UserBranchDto>(createUserBranch); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
userBranch.UserId = input.UserId; |
||||
|
userBranch.BranchId = input.BranchId; |
||||
|
//修改角色信息
|
||||
|
var getRoleIds = userBranch.Roles.ToList(); |
||||
|
if (getRoleIds != null) |
||||
|
{ |
||||
|
for (int i = getRoleIds.Count; i > 0; i--) |
||||
|
{ |
||||
|
var role = getRoleIds[i - 1]; |
||||
|
userBranch.RemoveRole(role.RoleId); |
||||
|
} |
||||
|
var getRoles = input.Roles; |
||||
|
if (getRoles != null) |
||||
|
{ |
||||
|
foreach (var role in getRoles) |
||||
|
{ |
||||
|
userBranch.AddRole(role.RoleId); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
if (input.Roles == null || input.Roles.Count == 0) |
||||
|
{ |
||||
|
await _repository.UpdateAsync(userBranch); |
||||
|
} |
||||
|
else |
||||
|
{ |
||||
|
await _repository.UpdateAsync(userBranch, true); |
||||
|
} |
||||
|
ObjectMapper.Map<UserBranch, UserBranchDto>(userBranch); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
//public virtual async Task<UserBranchDto> CreateAsync(CreateOrUpdateUserBranchDto input)
|
||||
|
//{
|
||||
|
// var exist = await _repository.FirstOrDefaultAsync(_ => _.UserId == input.UserId && _.BranchId == input.BranchId);
|
||||
|
// if (exist != null) throw new BusinessException("该资源信息已存在,不要重复添加!");
|
||||
|
|
||||
|
// var userBranch = new UserBranch(GuidGenerator.Create(),
|
||||
|
// input.UserId,
|
||||
|
// input.BranchId
|
||||
|
// );
|
||||
|
// await _repository.InsertAsync(userBranch);
|
||||
|
// var userBranchRoles = input.Roles;
|
||||
|
// //选择了角色信息
|
||||
|
// foreach (var role in userBranchRoles)
|
||||
|
// {
|
||||
|
// userBranch.AddRole(role.RoleId);
|
||||
|
// }
|
||||
|
// return ObjectMapper.Map<UserBranch, UserBranchDto>(userBranch);
|
||||
|
//}
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 单条删除
|
||||
|
/// </summary>
|
||||
|
/// <param name="userId"></param>
|
||||
|
/// <param name="branchId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost] |
||||
|
[Route("{userId}/{branchId}/delete")] |
||||
|
[Authorize(BaseServicePermissions.UserBranch.Delete)] |
||||
|
public virtual async Task DeleteUnitAsync(Guid userId, Guid branchId) |
||||
|
{ |
||||
|
await _repository.DeleteAsync(p => p.UserId == userId && p.BranchId == branchId); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 根据用户ID进行删除
|
||||
|
/// </summary>
|
||||
|
/// <param name="userId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost] |
||||
|
[Route("{userId}/delete")] |
||||
|
[Authorize(BaseServicePermissions.UserBranch.Delete)] |
||||
|
public virtual async Task DeleteUnitAsync(Guid userId) |
||||
|
{ |
||||
|
await _repository.DeleteAsync(p => p.UserId == userId); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 批量删除
|
||||
|
/// </summary>
|
||||
|
/// <param name="ids"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPost] |
||||
|
[Route("delete")] |
||||
|
[Authorize(BaseServicePermissions.UserBranch.Delete)] |
||||
|
public virtual async Task DeleteAsync(List<Guid> ids) |
||||
|
{ |
||||
|
foreach (var id in ids) |
||||
|
{ |
||||
|
await _repository.DeleteAsync(_ => _.Id == id); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 修改操作
|
||||
|
/// </summary>
|
||||
|
/// <param name="id"></param>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpPut] |
||||
|
[Route("{id}")] |
||||
|
[Authorize(BaseServicePermissions.UserBranch.Update)] |
||||
|
public virtual async Task<UserBranchDto> UpdateAsync(Guid id, CreateOrUpdateUserBranchDto input) |
||||
|
{ |
||||
|
var userBranch = await _repository.FirstOrDefaultAsync(_ => _.UserId == input.UserId && _.BranchId == input.BranchId); |
||||
|
userBranch.UserId = input.UserId; |
||||
|
userBranch.BranchId = input.BranchId; |
||||
|
//修改角色信息
|
||||
|
var getRoleIds = userBranch.Roles; |
||||
|
if (getRoleIds != null) |
||||
|
{ |
||||
|
foreach (var removerole in getRoleIds) |
||||
|
{ |
||||
|
userBranch.RemoveRole(removerole.RoleId); |
||||
|
} |
||||
|
var getRoles = input.Roles; |
||||
|
if (getRoles != null) |
||||
|
{ |
||||
|
foreach (var role in getRoles) |
||||
|
{ |
||||
|
userBranch.AddRole(role.RoleId); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return ObjectMapper.Map<UserBranch, UserBranchDto>(userBranch); |
||||
|
} |
||||
|
|
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 查单条数据
|
||||
|
/// </summary>
|
||||
|
/// <param name="id"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("{id}")] |
||||
|
public virtual async Task<UserBranchDto> GetAsync(Guid id) |
||||
|
{ |
||||
|
var result = await _repository.GetAsync(id); |
||||
|
return ObjectMapper.Map<UserBranch, UserBranchDto>(result); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 分页查询
|
||||
|
/// </summary>
|
||||
|
/// <param name="input"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("paged")] |
||||
|
public virtual async Task<PagedResultDto<UserBranchDto>> GetPagedListAsync(GetUserBranchInput input) |
||||
|
{ |
||||
|
var query = _repository |
||||
|
.WhereIf(input.UserId.HasValue, _ => _.UserId == input.UserId); |
||||
|
var items = await query |
||||
|
.Skip(input.SkipCount) |
||||
|
.Take(input.MaxResultCount) |
||||
|
.ToListAsync(); |
||||
|
var totalCount = await query.CountAsync(); |
||||
|
|
||||
|
var dtos = ObjectMapper.Map<List<UserBranch>, List<UserBranchDto>>(items); |
||||
|
return new PagedResultDto<UserBranchDto>(totalCount, dtos); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 分支列表(输入用户ID)
|
||||
|
/// </summary>
|
||||
|
/// <param name="userId">用户ID</param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("{userId}/branches")] |
||||
|
[AllowAnonymous] |
||||
|
public virtual async Task<List<UserBranchDto>> GetUserBranchsAsync(Guid userId) |
||||
|
{ |
||||
|
var dtos = new List<UserBranchDto>(); |
||||
|
await GetBranchList(userId, dtos); |
||||
|
return dtos; |
||||
|
} |
||||
|
|
||||
|
private async Task GetBranchList(Guid userId, List<UserBranchDto> dtos) |
||||
|
{ |
||||
|
var userBranches = _repository.Where(_ => _.UserId == userId); |
||||
|
foreach (var query in userBranches) |
||||
|
{ |
||||
|
var branch = await _branchAppService.GetAsync(query.BranchId); |
||||
|
dtos.Add(new UserBranchDto() |
||||
|
{ |
||||
|
BranchId = query.BranchId, |
||||
|
BranchName = branch.Name, |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 分支列表(当前登录用户)
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("current/branches")] |
||||
|
[AllowAnonymous] |
||||
|
public virtual async Task<List<UserBranchDto>> GetCurrentUserBranchesAsync() |
||||
|
{ |
||||
|
var dtos = new List<UserBranchDto>(); |
||||
|
await GetBranchList(CurrentUser.GetId(), dtos); |
||||
|
return dtos; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取当前登录用户默认的组织
|
||||
|
/// </summary>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("user-branch/{userId}")] |
||||
|
[AllowAnonymous] |
||||
|
public virtual async Task<UserBranchDto> GetCurrentUserBranchAsync(Guid userId) |
||||
|
{ |
||||
|
var dto = new UserBranchDto(); |
||||
|
var userBranche = _repository.FirstOrDefault(_ => _.UserId == userId); |
||||
|
if (userBranche == null) |
||||
|
{ |
||||
|
throw new BusinessException("当前登录用户不存在!"); |
||||
|
} |
||||
|
var branch = await _branchAppService.GetAsync(userBranche.BranchId); |
||||
|
dto.BranchId = branch.Id; |
||||
|
return dto; |
||||
|
} |
||||
|
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取当前登录用户所在组织的所有权限信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="branchId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("{branchId}/auth-config")] |
||||
|
[AllowAnonymous] |
||||
|
public virtual async Task<ApplicationAuthes> GetAuthConfigAsync(Guid branchId) |
||||
|
{ |
||||
|
var authConfig = new ApplicationAuthes(); |
||||
|
var policyNames = await _abpAuthorizationPolicyProvider.GetPoliciesNamesAsync(); |
||||
|
foreach (var policyName in policyNames) |
||||
|
{ |
||||
|
authConfig.Policies[policyName] = true; |
||||
|
} |
||||
|
var userId = CurrentUser.GetId(); |
||||
|
|
||||
|
//获取当前用户的所有权限信息
|
||||
|
var grantedPermuissions = await GetUserGrantedPermissionsAsync(userId, branchId); |
||||
|
if (grantedPermuissions == null || grantedPermuissions.Count == 0) |
||||
|
{ |
||||
|
throw new BusinessException("当前登录用户没有任何权限信息,请找管理员进行维护!"); |
||||
|
} |
||||
|
//获取当前用户所在组织的所有角色名
|
||||
|
var userRoleName = await GetUserRoleNamesAsync(userId, branchId); |
||||
|
if (userRoleName == null) |
||||
|
{ |
||||
|
throw new BusinessException("当前登录用户没有任何组织信息,请找管理员进行维护!"); |
||||
|
} |
||||
|
|
||||
|
foreach (var roleName in userRoleName) |
||||
|
{ |
||||
|
var userPermission = grantedPermuissions.Where(_ => _.ProviderKey == roleName); |
||||
|
foreach (var permission in userPermission) |
||||
|
{ |
||||
|
//GrantedPolicies的key键不能相同
|
||||
|
if (authConfig.GrantedPolicies.ContainsKey(permission.Name)) |
||||
|
continue; |
||||
|
authConfig.GrantedPolicies.Add(permission.Name, true); |
||||
|
} |
||||
|
} |
||||
|
return authConfig; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 权限信息(单个用户)(获取权限调用)
|
||||
|
/// </summary>
|
||||
|
/// <param name="userId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
protected virtual async Task<List<PermissionGrant>> GetUserGrantedPermissionsAsync(Guid userId,Guid branchId) |
||||
|
{ |
||||
|
var permissionGrants = new List<PermissionGrant>(); |
||||
|
var listRolesName = await GetUserRoleNamesAsync(userId, branchId); |
||||
|
if (listRolesName != null) |
||||
|
{ |
||||
|
foreach (var rolename in listRolesName) |
||||
|
{ |
||||
|
var permissionGrantsInRole = await PermissionGrantRepository.GetListAsync(RolePermissionValueProvider.ProviderName, rolename); |
||||
|
if (permissionGrantsInRole != null) |
||||
|
{ |
||||
|
foreach (var permiss in permissionGrantsInRole) |
||||
|
{ |
||||
|
permissionGrants.Add(permiss); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return permissionGrants; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 获取出用户所在当前组织的所有角色名称(获取权限调用)
|
||||
|
/// </summary>
|
||||
|
/// <param name="userId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
protected virtual async Task<List<string>> GetUserRoleNamesAsync(Guid userId, Guid branchId) |
||||
|
{ |
||||
|
var userBranch = await _repository.GetAsync(_ => _.UserId == userId && _.BranchId == branchId); |
||||
|
var userRoles = userBranch.Roles.ToList(); |
||||
|
//var userRoles = await GetUserRolesAsync(userId, branchId);
|
||||
|
var roles = await IdentityRoleRepository.GetListAsync(); |
||||
|
return userRoles.Select(role => roles.FirstOrDefault(p => p.Id == role.RoleId)?.Name) |
||||
|
.Where(roleName => !string.IsNullOrWhiteSpace(roleName)).ToList(); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 根据用户ID、组织ID获取该用户角色信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="userId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("userRoles/{userId}/{branchId}")] |
||||
|
public virtual async Task<List<UserBranchRole>> GetUserRolesAsync(Guid userId,Guid branchId) |
||||
|
{ |
||||
|
var roleList = new List<UserBranchRole>(); |
||||
|
var isInRole = _repository.FirstOrDefault(_ => _.UserId == userId && _.BranchId == branchId); |
||||
|
if (isInRole != null) |
||||
|
{ |
||||
|
var userBranch = await _repository.GetAsync(_ => _.UserId == userId && _.BranchId == branchId); |
||||
|
var roles = userBranch.Roles.ToList(); |
||||
|
foreach(var role in roles) |
||||
|
{ |
||||
|
roleList.Add(new UserBranchRole() { RoleId = role.RoleId }); |
||||
|
} |
||||
|
} |
||||
|
return roleList; |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 根据组织ID查角色信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="branchId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("userRoles/{branchId}")] |
||||
|
public virtual List<UserBranchRole> GetBranchRolesAsync(Guid branchId) |
||||
|
{ |
||||
|
var dtos = new List<UserBranchRole>(); |
||||
|
var isInRole = _repository.Where(_ => _.BranchId == branchId); |
||||
|
if (isInRole != null) |
||||
|
{ |
||||
|
foreach (var userRoles in isInRole) |
||||
|
{ |
||||
|
foreach (var role in userRoles.Roles) |
||||
|
{ |
||||
|
dtos.Add(new UserBranchRole() { RoleId = role.RoleId }); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return dtos; |
||||
|
//var roleList = new List<UserBranchRole>();
|
||||
|
//var isInRole = _repository.Where(_ => _.BranchId == branchId);
|
||||
|
//if(isInRole!=null)
|
||||
|
//{
|
||||
|
// var userBranch = await _repository.GetAsync(_ => _.BranchId == branchId);
|
||||
|
// var roles = userBranch.Roles.ToList();
|
||||
|
// foreach (var role in roles)
|
||||
|
// {
|
||||
|
// roleList.Add(new UserBranchRole() { RoleId = role.RoleId });
|
||||
|
// }
|
||||
|
//}
|
||||
|
//return roleList;
|
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 根据用户ID查角色信息
|
||||
|
/// </summary>
|
||||
|
/// <param name="userId"></param>
|
||||
|
/// <returns></returns>
|
||||
|
[HttpGet] |
||||
|
[Route("{userId}/userRoles")] |
||||
|
public virtual List<UserBranchRole> GetUserRolesAsync(Guid userId) |
||||
|
{ |
||||
|
var dtos = new List<UserBranchRole>(); |
||||
|
var isInRole = _repository.Where(_ => _.UserId == userId); |
||||
|
if (isInRole != null) |
||||
|
{ |
||||
|
foreach (var userRoles in isInRole) |
||||
|
{ |
||||
|
foreach (var role in userRoles.Roles) |
||||
|
{ |
||||
|
dtos.Add(new UserBranchRole() { RoleId = role.RoleId }); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
return dtos; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
} |
@ -0,0 +1,14 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Text; |
||||
|
using Volo.Abp.Identity; |
||||
|
|
||||
|
namespace BaseService.BaseData |
||||
|
{ |
||||
|
public class AppIdentityRole: IdentityRole |
||||
|
{ |
||||
|
public string RoleName { get; set; } |
||||
|
|
||||
|
public Guid RoleId { get; set; } |
||||
|
} |
||||
|
} |
@ -0,0 +1,152 @@ |
|||||
|
using BaseService.RelationBaseData; |
||||
|
using JetBrains.Annotations; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Collections.ObjectModel; |
||||
|
using System.Linq; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Domain.Entities.Auditing; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
|
||||
|
namespace BaseService.BaseData |
||||
|
{ |
||||
|
public class Branch : AuditedAggregateRoot<Guid>, ISoftDelete |
||||
|
{ |
||||
|
public Guid? TenantId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 机构分类:1.公司;2.组织;3.部门;4.供应商
|
||||
|
/// </summary>
|
||||
|
public short CategoryId { get; set; } |
||||
|
|
||||
|
public Guid? Pid { get; set; } |
||||
|
|
||||
|
public string Name { get; set; } |
||||
|
|
||||
|
public string FullName { get; set; } |
||||
|
|
||||
|
public int Sort { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 是否子集
|
||||
|
/// </summary>
|
||||
|
public bool Leaf { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 级联
|
||||
|
/// </summary>
|
||||
|
public string CascadeId { get; set; } |
||||
|
|
||||
|
public bool Enabled { get; set; } |
||||
|
|
||||
|
public bool IsDeleted { get; set; } |
||||
|
|
||||
|
public virtual ICollection<BranchRole> Roles { get; set; } |
||||
|
|
||||
|
public Branch(Guid id, Guid? tenantId, short categoryId, Guid? pid, [NotNull] string name, string fullName, int sort, bool leaf, bool enabled) |
||||
|
{ |
||||
|
TenantId = tenantId; |
||||
|
Id = id; |
||||
|
CategoryId = categoryId; |
||||
|
Pid = pid; |
||||
|
Name = name; |
||||
|
FullName = fullName; |
||||
|
Sort = sort; |
||||
|
Enabled = enabled; |
||||
|
Leaf = leaf; |
||||
|
Roles = new Collection<BranchRole>(); |
||||
|
} |
||||
|
|
||||
|
public virtual void AddRole(Guid roleId) |
||||
|
{ |
||||
|
Check.NotNull(roleId, nameof(roleId)); |
||||
|
|
||||
|
if (IsInRole(roleId)) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
Roles.Add(new BranchRole(roleId, Id)); |
||||
|
} |
||||
|
|
||||
|
public virtual void RemoveRole(Guid roleId) |
||||
|
{ |
||||
|
Check.NotNull(roleId, nameof(roleId)); |
||||
|
|
||||
|
if (!IsInRole(roleId)) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
Roles.RemoveAll(r => r.RoleId == roleId); |
||||
|
} |
||||
|
|
||||
|
public virtual bool IsInRole(Guid roleId) |
||||
|
{ |
||||
|
Check.NotNull(roleId, nameof(roleId)); |
||||
|
|
||||
|
return Roles.Any(r => r.RoleId == roleId); |
||||
|
} |
||||
|
///// <summary>
|
||||
|
///// 机构分类:1.公司;2.分支;3.部门;4.供应商
|
||||
|
///// </summary>
|
||||
|
//public short CategoryId { get; set; }
|
||||
|
|
||||
|
//public Guid? Pid { get; set; }
|
||||
|
|
||||
|
//public string Name { get; set; }
|
||||
|
|
||||
|
//public string FullName { get; set; }
|
||||
|
|
||||
|
//public int Sort { get; set; }
|
||||
|
|
||||
|
//public bool Enabled { get; set; }
|
||||
|
|
||||
|
//public bool IsDeleted { get; set; }
|
||||
|
|
||||
|
//public virtual ICollection<BranchRole> Roles { get; set; }
|
||||
|
|
||||
|
//public Branch(Guid id, short categoryId, Guid? pid, [NotNull] string name, string fullName, int sort, bool enabled)
|
||||
|
//{
|
||||
|
// Id = id;
|
||||
|
// CategoryId = categoryId;
|
||||
|
// Pid = pid;
|
||||
|
// Name = name;
|
||||
|
// FullName = fullName;
|
||||
|
// Sort = sort;
|
||||
|
// Enabled = enabled;
|
||||
|
// Roles = new Collection<BranchRole>();
|
||||
|
//}
|
||||
|
|
||||
|
//public virtual void AddRole(Guid roleId)
|
||||
|
//{
|
||||
|
// Check.NotNull(roleId, nameof(roleId));
|
||||
|
|
||||
|
// if (IsInRole(roleId))
|
||||
|
// {
|
||||
|
// return;
|
||||
|
// }
|
||||
|
|
||||
|
// Roles.Add(new BranchRole(roleId, Id));
|
||||
|
//}
|
||||
|
|
||||
|
//public virtual void RemoveRole(Guid roleId)
|
||||
|
//{
|
||||
|
// Check.NotNull(roleId, nameof(roleId));
|
||||
|
|
||||
|
// if (!IsInRole(roleId))
|
||||
|
// {
|
||||
|
// return;
|
||||
|
// }
|
||||
|
|
||||
|
// Roles.RemoveAll(r => r.RoleId == roleId);
|
||||
|
//}
|
||||
|
|
||||
|
//public virtual bool IsInRole(Guid roleId)
|
||||
|
//{
|
||||
|
// Check.NotNull(roleId, nameof(roleId));
|
||||
|
|
||||
|
// return Roles.Any(r => r.RoleId == roleId);
|
||||
|
//}
|
||||
|
} |
||||
|
} |
@ -0,0 +1,90 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Collections.ObjectModel; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using System.Linq; |
||||
|
using System.Text; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Domain.Entities; |
||||
|
using Volo.Abp.Domain.Entities.Auditing; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
|
||||
|
namespace BaseService.BaseData |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 用户-分支
|
||||
|
/// </summary>
|
||||
|
public class UserBranch : AuditedAggregateRoot<Guid> |
||||
|
{ |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 用户ID
|
||||
|
/// </summary>
|
||||
|
public Guid UserId { get; set; } |
||||
|
|
||||
|
// /// <summary>
|
||||
|
// /// 用户名称
|
||||
|
// /// </summary>
|
||||
|
// [NotMapped]
|
||||
|
// public string UserName { get; set; }
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 分支ID
|
||||
|
/// </summary>
|
||||
|
public Guid BranchId { get; set; } |
||||
|
|
||||
|
// /// <summary>
|
||||
|
// /// 分支机构名称
|
||||
|
// /// </summary>
|
||||
|
// [NotMapped]
|
||||
|
// public string BranchName { get; set; }
|
||||
|
//
|
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 软删除
|
||||
|
/// </summary>
|
||||
|
//public bool IsDeleted { get; set; }
|
||||
|
|
||||
|
public virtual ICollection<UserBranchRole> Roles { get; set; } |
||||
|
|
||||
|
|
||||
|
public UserBranch(Guid id, Guid userId, Guid branchId) : base(id) |
||||
|
{ |
||||
|
UserId = userId; |
||||
|
BranchId = branchId; |
||||
|
Roles = new Collection<UserBranchRole>(); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public virtual void AddRole(Guid roleId) |
||||
|
{ |
||||
|
Check.NotNull(roleId, nameof(roleId)); |
||||
|
|
||||
|
if (IsInRole(roleId)) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
Roles.Add(new UserBranchRole(roleId)); |
||||
|
} |
||||
|
|
||||
|
public virtual void RemoveRole(Guid roleId) |
||||
|
{ |
||||
|
Check.NotNull(roleId, nameof(roleId)); |
||||
|
|
||||
|
if (!IsInRole(roleId)) |
||||
|
{ |
||||
|
return; |
||||
|
} |
||||
|
|
||||
|
Roles.RemoveAll(r => r.RoleId == roleId); |
||||
|
} |
||||
|
|
||||
|
public virtual bool IsInRole(Guid roleId) |
||||
|
{ |
||||
|
Check.NotNull(roleId, nameof(roleId)); |
||||
|
|
||||
|
return Roles.Any(r => r.RoleId == roleId); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,41 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using System.Text; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Domain.Entities; |
||||
|
using Volo.Abp.Domain.Entities.Auditing; |
||||
|
using Volo.Abp.Domain.Values; |
||||
|
using Volo.Abp.Identity; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
|
||||
|
namespace BaseService.BaseData |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 用户--分支--角色(多对多表)
|
||||
|
/// </summary>
|
||||
|
public class UserBranchRole : ValueObject |
||||
|
{ |
||||
|
/// <summary>
|
||||
|
/// 角色ID
|
||||
|
/// </summary>
|
||||
|
public Guid RoleId { get; set; } |
||||
|
|
||||
|
|
||||
|
|
||||
|
public UserBranchRole() |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
public UserBranchRole(Guid roleId) |
||||
|
{ |
||||
|
RoleId = roleId; |
||||
|
} |
||||
|
|
||||
|
protected override IEnumerable<object> GetAtomicValues() |
||||
|
{ |
||||
|
yield return RoleId; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,35 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk"> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<OutputType>Library</OutputType> |
||||
|
<TargetFramework>net5.0</TargetFramework> |
||||
|
<RootNamespace>BaseService</RootNamespace> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<Compile Remove="BaseData\AppIdentityRole.cs" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<None Remove="Localization\BaseService\cs.json" /> |
||||
|
<None Remove="Localization\BaseService\en.json" /> |
||||
|
<None Remove="Localization\BaseService\zh-Hans.json" /> |
||||
|
<None Remove="Localization\BaseService\zh-Hant.json" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<EmbeddedResource Include="Localization\BaseService\cs.json" /> |
||||
|
<EmbeddedResource Include="Localization\BaseService\en.json" /> |
||||
|
<EmbeddedResource Include="Localization\BaseService\zh-Hans.json" /> |
||||
|
<EmbeddedResource Include="Localization\BaseService\zh-Hant.json" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="Volo.Abp.Ddd.Domain" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.EntityFrameworkCore" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.PermissionManagement.Domain.Identity" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.Settings" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.Users.Domain" Version="4.3.3" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
</Project> |
@ -0,0 +1,15 @@ |
|||||
|
namespace BaseService |
||||
|
{ |
||||
|
public static class BaseServiceConsts |
||||
|
{ |
||||
|
public const int MaxNumeralLength = 16; |
||||
|
|
||||
|
public const int MaxCodeLength = 32; |
||||
|
|
||||
|
public const int MaxNameLength = 50; |
||||
|
|
||||
|
public const int MaxFullNameLength = 128; |
||||
|
|
||||
|
public const int MaxNotesLength = 256; |
||||
|
} |
||||
|
} |
@ -0,0 +1,41 @@ |
|||||
|
using BaseService.Localization; |
||||
|
using Volo.Abp.Localization; |
||||
|
using Volo.Abp.Modularity; |
||||
|
using Volo.Abp.PermissionManagement.Identity; |
||||
|
using Volo.Abp.Validation.Localization; |
||||
|
using Volo.Abp.VirtualFileSystem; |
||||
|
|
||||
|
namespace BaseService |
||||
|
{ |
||||
|
[DependsOn( |
||||
|
typeof(AbpPermissionManagementDomainIdentityModule) |
||||
|
)] |
||||
|
public class BaseServiceDomainModule : AbpModule |
||||
|
{ |
||||
|
public override void ConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
ConfigureVirtualFileSystem(); |
||||
|
|
||||
|
ConfigureLocalization(); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureLocalization() |
||||
|
{ |
||||
|
Configure<AbpLocalizationOptions>(options => |
||||
|
{ |
||||
|
options.Resources |
||||
|
.Add<BaseServiceResource>("zh-Hans") |
||||
|
.AddBaseTypes(typeof(AbpValidationResource)) |
||||
|
.AddVirtualJson("/Localization/BaseService"); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureVirtualFileSystem() |
||||
|
{ |
||||
|
Configure<AbpVirtualFileSystemOptions>(options => |
||||
|
{ |
||||
|
options.FileSets.AddEmbedded<BaseServiceDomainModule>("BaseService"); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,32 @@ |
|||||
|
using Volo.Abp.Threading; |
||||
|
|
||||
|
namespace BaseService |
||||
|
{ |
||||
|
public class BaseServiceModuleExtensionConfigurator |
||||
|
{ |
||||
|
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); |
||||
|
|
||||
|
public static void Configure() |
||||
|
{ |
||||
|
OneTimeRunner.Run(() => |
||||
|
{ |
||||
|
ConfigureExistingProperties(); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private static void ConfigureExistingProperties() |
||||
|
{ |
||||
|
/* You can change max lengths for properties of the |
||||
|
* entities defined in the modules used by your application. |
||||
|
* |
||||
|
* Example: Change user and role name max lengths |
||||
|
|
||||
|
IdentityUserConsts.MaxNameLength = 99; |
||||
|
IdentityRoleConsts.MaxNameLength = 99; |
||||
|
|
||||
|
* Notice: It is not suggested to change property lengths |
||||
|
* unless you really need it. Go with the standard values wherever possible. |
||||
|
*/ |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
{ |
||||
|
"culture": "cs", |
||||
|
"texts": { |
||||
|
"Menu:Home": "Úvod", |
||||
|
"Welcome": "Vítejte", |
||||
|
"LongWelcomeMessage": "Vítejte v aplikaci. Toto je startovací projekt založený na ABP frameworku. Pro více informací, navštivte abp.io.", |
||||
|
"Edit": "修改", |
||||
|
"Delete": "删除", |
||||
|
"Create": "新增", |
||||
|
"Business": "业务", |
||||
|
"DataDictionary": "数据字典" |
||||
|
} |
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
{ |
||||
|
"culture": "en", |
||||
|
"texts": { |
||||
|
"Menu:Home": "Home", |
||||
|
"Welcome": "Welcome", |
||||
|
"LongWelcomeMessage": "Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io." |
||||
|
} |
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
{ |
||||
|
"culture": "pl", |
||||
|
"texts": { |
||||
|
"Menu:Home": "Home", |
||||
|
"Welcome": "Witaj", |
||||
|
"LongWelcomeMessage": "Witaj w aplikacji. To jest inicjalny projekt bazujący na ABP framework. Po więcej informacji odwiedź stronę abp.io." |
||||
|
} |
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
{ |
||||
|
"culture": "pt-BR", |
||||
|
"texts": { |
||||
|
"Menu:Home": "Principal", |
||||
|
"Welcome": "Seja bem-vindo!", |
||||
|
"LongWelcomeMessage": "Bem-vindo a esta aplicação. Este é um projeto inicial baseado no ABP framework. Para mais informações, visite abp.io." |
||||
|
} |
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
{ |
||||
|
"culture": "tr", |
||||
|
"texts": { |
||||
|
"Menu:Home": "Ana sayfa", |
||||
|
"Welcome": "Hoşgeldiniz", |
||||
|
"LongWelcomeMessage": "Uygulamaya hoşgeldiniz. Bu, ABP framework'ü üzerine bina edilmiş bir başlangıç projesidir. Daha fazla bilgi için abp.io adresini ziyaret edebilirsiniz." |
||||
|
} |
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
{ |
||||
|
"culture": "vi", |
||||
|
"texts": { |
||||
|
"Menu:Home": "Trang chủ", |
||||
|
"Welcome": "Chào mừng bạn", |
||||
|
"LongWelcomeMessage": "Chào mừng bạn đến ứng dụng. Đây là một dự án khởi nghiệp dựa trên khung ABP. Để biết thêm thông tin, hãy truy cập abp.io." |
||||
|
} |
||||
|
} |
@ -0,0 +1,18 @@ |
|||||
|
{ |
||||
|
"culture": "zh-Hans", |
||||
|
"texts": { |
||||
|
"Menu:Home": "首页", |
||||
|
"Welcome": "欢迎", |
||||
|
"LongWelcomeMessage": "欢迎来到该应用程序. 这是一个基于ABP框架的启动项目. 有关更多信息, 请访问 abp.io.", |
||||
|
"Edit": "修改", |
||||
|
"Delete": "删除", |
||||
|
"Create": "新增", |
||||
|
"BaseService": "基础服务", |
||||
|
"DataDictionary": "数据字典", |
||||
|
"Branch": "分支机构", |
||||
|
"Job": "岗位", |
||||
|
"Employee": "职员", |
||||
|
"AbpSettingManagement": "设置管理", |
||||
|
"AuditLogging": "系统日志" |
||||
|
} |
||||
|
} |
@ -0,0 +1,8 @@ |
|||||
|
{ |
||||
|
"culture": "zh-Hant", |
||||
|
"texts": { |
||||
|
"Menu:Home": "首頁", |
||||
|
"Welcome": "歡迎", |
||||
|
"LongWelcomeMessage": "歡迎來到此應用程式. 這是一個基於ABP框架的起始專案. 有關更多訊息, 請瀏覽 abp.io." |
||||
|
} |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
using Volo.Abp.Localization; |
||||
|
|
||||
|
namespace BaseService.Localization |
||||
|
{ |
||||
|
[LocalizationResourceName("BaseService")] |
||||
|
public class BaseServiceResource |
||||
|
{ |
||||
|
} |
||||
|
} |
@ -0,0 +1,48 @@ |
|||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.ComponentModel.DataAnnotations.Schema; |
||||
|
using System.Text; |
||||
|
using Volo.Abp.Domain.Entities.Auditing; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
|
||||
|
namespace BaseService.RelationBaseData |
||||
|
{ |
||||
|
public class BranchRole : CreationAuditedEntity |
||||
|
{ |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Id of the Role.
|
||||
|
/// </summary>
|
||||
|
public Guid RoleId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Id of the Branch />.
|
||||
|
/// </summary>
|
||||
|
public Guid BranchId { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Initializes a new instance of the BranchRole/> class.
|
||||
|
/// </summary>
|
||||
|
protected BranchRole() |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// Initializes a new instance of the BranchRole/> class.
|
||||
|
/// </summary>
|
||||
|
|
||||
|
/// <param name="roleId">Id of the Role.</param>
|
||||
|
/// <param name="branchId">Id of the Branch/>.</param>
|
||||
|
public BranchRole(Guid roleId, Guid branchId) |
||||
|
{ |
||||
|
RoleId = roleId; |
||||
|
BranchId = branchId; |
||||
|
} |
||||
|
|
||||
|
public override object[] GetKeys() |
||||
|
{ |
||||
|
return new object[] { BranchId, RoleId }; |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,45 @@ |
|||||
|
using System; |
||||
|
using Volo.Abp.Domain.Entities.Auditing; |
||||
|
using Volo.Abp.Users; |
||||
|
|
||||
|
namespace BaseService.Users |
||||
|
{ |
||||
|
public class AppUser : FullAuditedAggregateRoot<Guid>, IUser |
||||
|
{ |
||||
|
#region Base properties
|
||||
|
|
||||
|
/* These properties are shared with the IdentityUser entity of the Identity module. |
||||
|
* Do not change these properties through this class. Instead, use Identity module |
||||
|
* services (like IdentityUserManager) to change them. |
||||
|
* So, this properties are designed as read only! |
||||
|
*/ |
||||
|
|
||||
|
public virtual Guid? TenantId { get; private set; } |
||||
|
|
||||
|
public virtual string UserName { get; private set; } |
||||
|
|
||||
|
public virtual string Name { get; private set; } |
||||
|
|
||||
|
public virtual string Surname { get; private set; } |
||||
|
|
||||
|
public virtual string Email { get; private set; } |
||||
|
|
||||
|
public virtual bool EmailConfirmed { get; private set; } |
||||
|
|
||||
|
public virtual string PhoneNumber { get; private set; } |
||||
|
|
||||
|
public virtual bool PhoneNumberConfirmed { get; private set; } |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
|
||||
|
//public Guid BranchId { get; set; }
|
||||
|
|
||||
|
//public bool Enable { get; set; }
|
||||
|
|
||||
|
private AppUser() |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,21 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk"> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<OutputType>Library</OutputType> |
||||
|
<TargetFramework>net5.0</TargetFramework> |
||||
|
<RootNamespace>BaseService</RootNamespace> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.Identity.EntityFrameworkCore" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.Settings" Version="4.3.3" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\BaseService.Domain\BaseService.Domain.csproj" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
</Project> |
@ -0,0 +1,55 @@ |
|||||
|
|
||||
|
using BaseService.BaseData; |
||||
|
using BaseService.RelationBaseData; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.EntityFrameworkCore.Modeling; |
||||
|
|
||||
|
namespace BaseService.EntityFrameworkCore |
||||
|
{ |
||||
|
public static class BaseDbContextModelCreatingExtensions |
||||
|
{ |
||||
|
public static void ConfigureBaseService(this ModelBuilder builder) |
||||
|
{ |
||||
|
Check.NotNull(builder, nameof(builder)); |
||||
|
|
||||
|
builder.Entity<Branch>(b => |
||||
|
{ |
||||
|
b.ToTable("base_branches"); |
||||
|
|
||||
|
b.ConfigureByConvention(); |
||||
|
|
||||
|
b.Property(x => x.Name).IsRequired().HasMaxLength(BaseServiceConsts.MaxNameLength); |
||||
|
b.Property(x => x.FullName).IsRequired().HasMaxLength(BaseServiceConsts.MaxFullNameLength); |
||||
|
b.Property(x => x.Enabled).HasDefaultValue(false); |
||||
|
|
||||
|
b.HasIndex(q => q.Pid); |
||||
|
}); |
||||
|
|
||||
|
|
||||
|
builder.Entity<UserBranch>(b => |
||||
|
{ |
||||
|
b.ToTable("base_user_branches"); |
||||
|
b.ConfigureByConvention(); |
||||
|
b.OwnsMany(p => p.Roles).ToTable("base_user_branch_role"); |
||||
|
}); |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
//分支-角色
|
||||
|
builder.Entity<BranchRole>(b => |
||||
|
{ |
||||
|
b.ToTable("base_branch_role"); |
||||
|
|
||||
|
b.ConfigureByConvention(); |
||||
|
|
||||
|
b.HasKey(ou => new { ou.BranchId, ou.RoleId }); |
||||
|
|
||||
|
//b.HasOne<Volo.Abp.Identity.IdentityRole>().WithMany().HasForeignKey(ou => ou.RoleId).IsRequired();
|
||||
|
}); |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
@ -0,0 +1,28 @@ |
|||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using System; |
||||
|
using Volo.Abp.Identity; |
||||
|
using Volo.Abp.ObjectExtending; |
||||
|
using Volo.Abp.Threading; |
||||
|
|
||||
|
namespace BaseService.EntityFrameworkCore |
||||
|
{ |
||||
|
public class BaseEfCoreEntityExtensionMappings |
||||
|
{ |
||||
|
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); |
||||
|
|
||||
|
public static void Configure() |
||||
|
{ |
||||
|
BaseServiceModuleExtensionConfigurator.Configure(); |
||||
|
|
||||
|
//OneTimeRunner.Run(() =>
|
||||
|
//{
|
||||
|
// ObjectExtensionManager.Instance
|
||||
|
// .MapEfCoreProperty<IdentityUser, bool>(
|
||||
|
// "Enable",
|
||||
|
// b => { b.HasDefaultValue(false); }
|
||||
|
// )
|
||||
|
// .MapEfCoreProperty<IdentityUser, Guid>("BranchId");
|
||||
|
//});
|
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,61 @@ |
|||||
|
|
||||
|
using BaseService.BaseData; |
||||
|
using BaseService.RelationBaseData; |
||||
|
using BaseService.Users; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Volo.Abp.Data; |
||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Volo.Abp.EntityFrameworkCore.Modeling; |
||||
|
using Volo.Abp.Identity; |
||||
|
using Volo.Abp.Users.EntityFrameworkCore; |
||||
|
|
||||
|
namespace BaseService.EntityFrameworkCore |
||||
|
{ |
||||
|
[ConnectionStringName("Default")] |
||||
|
public class BaseServiceDbContext : AbpDbContext<BaseServiceDbContext> |
||||
|
{ |
||||
|
|
||||
|
public DbSet<Branch> Branches { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 用户-分支-角色
|
||||
|
/// </summary>
|
||||
|
public DbSet<UserBranchRole> UserBranchRoles { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 用户-分支
|
||||
|
/// </summary>
|
||||
|
public DbSet<UserBranch> UserBranchs { get; set; } |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 分支--角色
|
||||
|
/// </summary>
|
||||
|
public DbSet<BranchRole> BranchRoles { get; set; } |
||||
|
|
||||
|
public BaseServiceDbContext(DbContextOptions<BaseServiceDbContext> options) |
||||
|
: base(options) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
protected override void OnModelCreating(ModelBuilder builder) |
||||
|
{ |
||||
|
base.OnModelCreating(builder); |
||||
|
|
||||
|
|
||||
|
//builder.Entity<AppUser>(b =>
|
||||
|
//{
|
||||
|
// b.ToTable(AbpIdentityDbProperties.DbTablePrefix + "Users"); //Sharing the same table "AbpUsers" with the IdentityUser
|
||||
|
|
||||
|
// b.ConfigureByConvention();
|
||||
|
// b.ConfigureAbpUser();
|
||||
|
|
||||
|
// b.Property(x => x.Enable).HasDefaultValue(true);
|
||||
|
|
||||
|
//});
|
||||
|
|
||||
|
builder.ConfigureBaseService(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
@ -0,0 +1,45 @@ |
|||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Volo.Abp.EntityFrameworkCore.SqlServer; |
||||
|
using Volo.Abp.Identity.EntityFrameworkCore; |
||||
|
using Volo.Abp.Modularity; |
||||
|
using Volo.Abp.PermissionManagement.EntityFrameworkCore; |
||||
|
using Volo.Abp.SettingManagement.EntityFrameworkCore; |
||||
|
|
||||
|
namespace BaseService.EntityFrameworkCore |
||||
|
{ |
||||
|
[DependsOn( |
||||
|
typeof(BaseServiceDomainModule), |
||||
|
typeof(AbpEntityFrameworkCoreSqlServerModule), |
||||
|
typeof(AbpPermissionManagementEntityFrameworkCoreModule), |
||||
|
typeof(AbpSettingManagementEntityFrameworkCoreModule), |
||||
|
typeof(AbpIdentityEntityFrameworkCoreModule) |
||||
|
)] |
||||
|
public class BaseServiceEntityFrameworkCoreModule : AbpModule |
||||
|
{ |
||||
|
public override void PreConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
BaseEfCoreEntityExtensionMappings.Configure(); |
||||
|
} |
||||
|
|
||||
|
public override void ConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
ConfigureDbContext(); |
||||
|
|
||||
|
ConfigureRepository(context); |
||||
|
} |
||||
|
|
||||
|
private static void ConfigureRepository(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
context.Services.AddAbpDbContext<BaseServiceDbContext>(options => |
||||
|
{ |
||||
|
options.AddDefaultRepositories(includeAllEntities: true); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureDbContext() |
||||
|
{ |
||||
|
Configure<AbpDbContextOptions>(options => { options.UseSqlServer(); }); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,60 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk.Web"> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<TargetFramework>net5.0</TargetFramework> |
||||
|
<RootNamespace>BaseService</RootNamespace> |
||||
|
<UserSecretsId>5a8c596c-d1b1-44b5-8758-988198ece459</UserSecretsId> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> |
||||
|
<DocumentationFile>D:\2020工作文件\WMS2.0\WMS2.0合并\SmartFactorySuite\src\Modules\BaseService\BaseService.Host\BaseService.Host.xml</DocumentationFile> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<Compile Remove="Logs\**" /> |
||||
|
<Content Remove="Logs\**" /> |
||||
|
<EmbeddedResource Remove="Logs\**" /> |
||||
|
<None Remove="Logs\**" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<!-- <PackageReference Include="BaseData.Application.Contracts" Version="3.2.3" /> --> |
||||
|
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" /> |
||||
|
<PackageReference Include="Microsoft.AspNetCore.Authentication.JwtBearer" Version="5.0.1" /> |
||||
|
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="5.0.1" /> |
||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.1"> |
||||
|
<PrivateAssets>all</PrivateAssets> |
||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> |
||||
|
</PackageReference> |
||||
|
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.1" /> |
||||
|
<PackageReference Include="Serilog.AspNetCore" Version="3.4.0" /> |
||||
|
<PackageReference Include="Serilog.Sinks.Async" Version="1.4.0" /> |
||||
|
<!-- <PackageReference Include="Serilog.Sinks.Elasticsearch" Version="8.4.1" /> --> |
||||
|
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" /> |
||||
|
<PackageReference Include="SettleAccount.HttpApi" Version="1.0.21" /> |
||||
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.6.3" /> |
||||
|
<PackageReference Include="Volo.Abp.AspNetCore.MultiTenancy" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.Autofac" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.Identity.HttpApi" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.PermissionManagement.Application" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.PermissionManagement.HttpApi" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.Settings" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.TenantManagement.Application" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.TenantManagement.EntityFrameworkCore" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.TenantManagement.HttpApi" Version="4.3.3" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\BaseService.Application\BaseService.Application.csproj" /> |
||||
|
<ProjectReference Include="..\BaseService.EntityFrameworkCore\BaseService.EntityFrameworkCore.csproj" /> |
||||
|
<ProjectReference Include="..\BaseService.HttpApi\BaseService.HttpApi.csproj" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ProjectExtensions><VisualStudio><UserProperties appsettings_1json__JsonSchema="" properties_4launchsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions> |
||||
|
|
||||
|
</Project> |
@ -0,0 +1,14 @@ |
|||||
|
<?xml version="1.0"?> |
||||
|
<doc> |
||||
|
<assembly> |
||||
|
<name>BaseService.Host</name> |
||||
|
</assembly> |
||||
|
<members> |
||||
|
<member name="M:BaseService.BaseServiceHostModule.ConfigurePasswordSet(Volo.Abp.Modularity.ServiceConfigurationContext)"> |
||||
|
<summary> |
||||
|
设置密码强度 |
||||
|
</summary> |
||||
|
<param name="context"></param> |
||||
|
</member> |
||||
|
</members> |
||||
|
</doc> |
@ -0,0 +1,275 @@ |
|||||
|
using BaseService.EntityFrameworkCore; |
||||
|
using Microsoft.AspNetCore.Authentication.JwtBearer; |
||||
|
using Microsoft.AspNetCore.Builder; |
||||
|
using Microsoft.AspNetCore.Cors; |
||||
|
using Microsoft.AspNetCore.DataProtection; |
||||
|
using Microsoft.AspNetCore.Identity; |
||||
|
using Microsoft.Extensions.Configuration; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Microsoft.OpenApi.Models; |
||||
|
using StackExchange.Redis; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Security.Claims; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.AspNetCore.MultiTenancy; |
||||
|
using Volo.Abp.AspNetCore.Mvc; |
||||
|
using Volo.Abp.AspNetCore.Serilog; |
||||
|
using Volo.Abp.Auditing; |
||||
|
using Volo.Abp.Autofac; |
||||
|
using Volo.Abp.Data; |
||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Volo.Abp.Identity; |
||||
|
using Volo.Abp.Localization; |
||||
|
using Volo.Abp.Modularity; |
||||
|
using Volo.Abp.MultiTenancy; |
||||
|
using Volo.Abp.PermissionManagement.HttpApi; |
||||
|
using Volo.Abp.Security.Claims; |
||||
|
using Volo.Abp.TenantManagement; |
||||
|
using Volo.Abp.Threading; |
||||
|
|
||||
|
//using Win.Sfs.BaseData;
|
||||
|
|
||||
|
//using BaseData;
|
||||
|
|
||||
|
namespace BaseService |
||||
|
{ |
||||
|
[DependsOn( |
||||
|
typeof(AbpAutofacModule), |
||||
|
typeof(BaseServiceApplicationModule), |
||||
|
typeof(BaseServiceEntityFrameworkCoreModule), |
||||
|
typeof(BaseServiceHttpApiModule), |
||||
|
typeof(AbpAspNetCoreMultiTenancyModule), |
||||
|
typeof(AbpPermissionManagementHttpApiModule), |
||||
|
typeof(AbpTenantManagementHttpApiModule), |
||||
|
typeof(AbpIdentityHttpApiModule), |
||||
|
// typeof(BaseDataHttpApiModule),
|
||||
|
//typeof(BaseDataApplicationContractsModule),
|
||||
|
typeof(AbpAspNetCoreSerilogModule) |
||||
|
)] |
||||
|
public class BaseServiceHostModule : AbpModule |
||||
|
{ |
||||
|
private const string DefaultCorsPolicyName = "Default"; |
||||
|
|
||||
|
public override void ConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
var configuration = context.Services.GetConfiguration(); |
||||
|
|
||||
|
ConfigureConventionalControllers(); |
||||
|
|
||||
|
ConfigureMultiTenancy(); |
||||
|
|
||||
|
//ConfigureJwt(context, configuration);
|
||||
|
|
||||
|
//ConfigureSwagger(context);
|
||||
|
|
||||
|
ConfigureDbContext(); |
||||
|
|
||||
|
//ConfigureRedis(context, configuration);
|
||||
|
|
||||
|
ConfigureAuditing(); |
||||
|
|
||||
|
ConfigureCros(context, configuration); |
||||
|
|
||||
|
ConfigureLocalization(); |
||||
|
|
||||
|
ConfigurePasswordSet(context); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureLocalization() |
||||
|
{ |
||||
|
Configure<AbpLocalizationOptions>(options => |
||||
|
{ |
||||
|
options.Languages.Add(new LanguageInfo("en", "en", "English")); |
||||
|
options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/// <summary>
|
||||
|
/// 设置密码强度
|
||||
|
/// </summary>
|
||||
|
/// <param name="context"></param>
|
||||
|
private void ConfigurePasswordSet(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
context.Services.Configure<IdentityOptions>(options => |
||||
|
{ |
||||
|
options.User.RequireUniqueEmail = true; |
||||
|
//options.Lockout.AllowedForNewUsers = true;
|
||||
|
//options.Lockout.MaxFailedAccessAttempts = 2;
|
||||
|
|
||||
|
options.Password.RequireDigit = false; |
||||
|
options.Password.RequireLowercase = false; |
||||
|
options.Password.RequireNonAlphanumeric = false; |
||||
|
options.Password.RequireUppercase = false; |
||||
|
options.Password.RequiredLength = 6; |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private static void ConfigureCros(ServiceConfigurationContext context, IConfiguration configuration) |
||||
|
{ |
||||
|
context.Services.AddCors(options => |
||||
|
{ |
||||
|
options.AddPolicy(DefaultCorsPolicyName, builder => |
||||
|
{ |
||||
|
builder |
||||
|
.WithOrigins( |
||||
|
configuration["App:CorsOrigins"] |
||||
|
.Split(",", StringSplitOptions.RemoveEmptyEntries) |
||||
|
.Select(o => o.RemovePostFix("/")) |
||||
|
.ToArray() |
||||
|
) |
||||
|
.WithAbpExposedHeaders() |
||||
|
.SetIsOriginAllowedToAllowWildcardSubdomains() |
||||
|
.AllowAnyHeader() |
||||
|
.AllowAnyMethod() |
||||
|
.AllowCredentials(); |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureAuditing() |
||||
|
{ |
||||
|
Configure<AbpAuditingOptions>(options => |
||||
|
{ |
||||
|
options.IsEnabledForGetRequests = true; |
||||
|
options.ApplicationName = "BaseService"; |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private static void ConfigureRedis(ServiceConfigurationContext context, IConfiguration configuration) |
||||
|
{ |
||||
|
context.Services.AddStackExchangeRedisCache(options => |
||||
|
{ |
||||
|
options.Configuration = configuration["Redis:Configuration"]; |
||||
|
}); |
||||
|
|
||||
|
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); |
||||
|
context.Services.AddDataProtection() |
||||
|
.PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys"); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureDbContext() |
||||
|
{ |
||||
|
Configure<AbpDbContextOptions>(options => { options.UseSqlServer(); }); |
||||
|
} |
||||
|
|
||||
|
private static void ConfigureSwagger(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
context.Services.AddSwaggerGen(options => |
||||
|
{ |
||||
|
options.SwaggerDoc("v1", new OpenApiInfo { Title = "BaseService Service API", Version = "v1" }); |
||||
|
options.DocInclusionPredicate((docName, description) => true); |
||||
|
options.CustomSchemaIds(type => type.FullName); |
||||
|
options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme |
||||
|
{ |
||||
|
Description = "请输入JWT令牌,例如:Bearer 12345abcdef", |
||||
|
Name = "Authorization", |
||||
|
In = ParameterLocation.Header, |
||||
|
Type = SecuritySchemeType.ApiKey, |
||||
|
Scheme = "Bearer" |
||||
|
}); |
||||
|
|
||||
|
options.AddSecurityRequirement(new OpenApiSecurityRequirement() |
||||
|
{ |
||||
|
{ |
||||
|
new OpenApiSecurityScheme |
||||
|
{ |
||||
|
Reference = new OpenApiReference |
||||
|
{ |
||||
|
Type = ReferenceType.SecurityScheme, |
||||
|
Id = "Bearer" |
||||
|
}, |
||||
|
Scheme = "oauth2", |
||||
|
Name = "Bearer", |
||||
|
In = ParameterLocation.Header, |
||||
|
}, |
||||
|
new List<string>() |
||||
|
} |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private static void ConfigureJwt(ServiceConfigurationContext context, IConfiguration configuration) |
||||
|
{ |
||||
|
context.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) |
||||
|
.AddJwtBearer(options => |
||||
|
{ |
||||
|
options.Authority = configuration["AuthServer:Authority"]; |
||||
|
options.RequireHttpsMetadata = false; |
||||
|
options.Audience = "BaseService"; |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureMultiTenancy() |
||||
|
{ |
||||
|
Configure<AbpMultiTenancyOptions>(options => { options.IsEnabled = true; }); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureConventionalControllers() |
||||
|
{ |
||||
|
//Configure<AbpAspNetCoreMvcOptions>(options =>
|
||||
|
//{
|
||||
|
// options.ConventionalControllers.Create(typeof(BaseServiceApplicationModule).Assembly);
|
||||
|
//});
|
||||
|
Configure<AbpAspNetCoreMvcOptions>(options => |
||||
|
{ |
||||
|
options |
||||
|
.ConventionalControllers |
||||
|
.Create(typeof(BaseServiceApplicationModule).Assembly, opts |
||||
|
=> |
||||
|
{ opts.RootPath = "base"; }) |
||||
|
; |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
public override void OnApplicationInitialization(ApplicationInitializationContext context) |
||||
|
{ |
||||
|
var app = context.GetApplicationBuilder(); |
||||
|
|
||||
|
app.UseCorrelationId(); |
||||
|
app.UseVirtualFiles(); |
||||
|
app.UseRouting(); |
||||
|
app.UseCors(DefaultCorsPolicyName); |
||||
|
app.UseAuthentication(); |
||||
|
app.UseMultiTenancy(); |
||||
|
|
||||
|
app.Use(async (ctx, next) => |
||||
|
{ |
||||
|
var currentPrincipalAccessor = ctx.RequestServices.GetRequiredService<ICurrentPrincipalAccessor>(); |
||||
|
var map = new Dictionary<string, string>() |
||||
|
{ |
||||
|
{ "sub", AbpClaimTypes.UserId }, |
||||
|
{ "role", AbpClaimTypes.Role }, |
||||
|
{ "email", AbpClaimTypes.Email }, |
||||
|
{ "name", AbpClaimTypes.UserName }, |
||||
|
}; |
||||
|
var mapClaims = currentPrincipalAccessor.Principal.Claims.Where(p => map.Keys.Contains(p.Type)).ToList(); |
||||
|
currentPrincipalAccessor.Principal.AddIdentity(new ClaimsIdentity(mapClaims.Select(p => new Claim(map[p.Type], p.Value, p.ValueType, p.Issuer)))); |
||||
|
await next(); |
||||
|
}); |
||||
|
|
||||
|
app.UseAbpRequestLocalization(); |
||||
|
app.UseAuthorization(); |
||||
|
app.UseSwagger(); |
||||
|
app.UseSwaggerUI(options => |
||||
|
{ |
||||
|
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Identity Service API"); |
||||
|
}); |
||||
|
|
||||
|
app.UseAuditing(); |
||||
|
app.UseAbpSerilogEnrichers(); |
||||
|
app.UseConfiguredEndpoints(); |
||||
|
|
||||
|
AsyncHelper.RunSync(async () => |
||||
|
{ |
||||
|
using (var scope = context.ServiceProvider.CreateScope()) |
||||
|
{ |
||||
|
await scope.ServiceProvider |
||||
|
.GetRequiredService<IDataSeeder>() |
||||
|
.SeedAsync(); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
//using Microsoft.AspNetCore.Mvc;
|
||||
|
//using Volo.Abp.AspNetCore.Mvc;
|
||||
|
|
||||
|
//namespace BaseService.Controllers
|
||||
|
//{
|
||||
|
// public class HomeController : AbpController
|
||||
|
// {
|
||||
|
// public ActionResult Index()
|
||||
|
// {
|
||||
|
// return Redirect("/swagger");
|
||||
|
// }
|
||||
|
// }
|
||||
|
//}
|
@ -0,0 +1,37 @@ |
|||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.AuditLogging.EntityFrameworkCore; |
||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Volo.Abp.Identity.EntityFrameworkCore; |
||||
|
using Volo.Abp.PermissionManagement.EntityFrameworkCore; |
||||
|
using Volo.Abp.SettingManagement.EntityFrameworkCore; |
||||
|
using Volo.Abp.TenantManagement.EntityFrameworkCore; |
||||
|
|
||||
|
namespace BaseService.EntityFrameworkCore |
||||
|
{ |
||||
|
public class BaseServiceMigrationDbContext : AbpDbContext<BaseServiceMigrationDbContext> |
||||
|
{ |
||||
|
public BaseServiceMigrationDbContext( |
||||
|
DbContextOptions<BaseServiceMigrationDbContext> options |
||||
|
) : base(options) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
protected override void OnModelCreating(ModelBuilder builder) |
||||
|
{ |
||||
|
base.OnModelCreating(builder); |
||||
|
|
||||
|
builder.ConfigurePermissionManagement(); |
||||
|
builder.ConfigureSettingManagement(); |
||||
|
builder.ConfigureAuditLogging(); |
||||
|
builder.ConfigureIdentity(); |
||||
|
builder.ConfigureTenantManagement(); |
||||
|
|
||||
|
builder.ConfigureBaseService(); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,31 @@ |
|||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Microsoft.EntityFrameworkCore.Design; |
||||
|
using Microsoft.Extensions.Configuration; |
||||
|
using System.IO; |
||||
|
|
||||
|
namespace BaseService.EntityFrameworkCore |
||||
|
{ |
||||
|
public class BaseServiceMigrationDbContextFactory : IDesignTimeDbContextFactory<BaseServiceMigrationDbContext> |
||||
|
{ |
||||
|
public BaseServiceMigrationDbContext CreateDbContext(string[] args) |
||||
|
{ |
||||
|
BaseEfCoreEntityExtensionMappings.Configure(); |
||||
|
|
||||
|
var configuration = BuildConfiguration(); |
||||
|
|
||||
|
var builder = new DbContextOptionsBuilder<BaseServiceMigrationDbContext>() |
||||
|
.UseSqlServer(configuration.GetConnectionString("Default")); |
||||
|
|
||||
|
return new BaseServiceMigrationDbContext(builder.Options); |
||||
|
} |
||||
|
|
||||
|
private static IConfigurationRoot BuildConfiguration() |
||||
|
{ |
||||
|
var builder = new ConfigurationBuilder() |
||||
|
.SetBasePath(Directory.GetCurrentDirectory()) |
||||
|
.AddJsonFile("appsettings.json", optional: false); |
||||
|
|
||||
|
return builder.Build(); |
||||
|
} |
||||
|
} |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,100 @@ |
|||||
|
// <auto-generated />
|
||||
|
using System; |
||||
|
using BaseService.EntityFrameworkCore; |
||||
|
//using FileStorage.EntityFrameworkCore;
|
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Microsoft.EntityFrameworkCore.Infrastructure; |
||||
|
using Microsoft.EntityFrameworkCore.Metadata; |
||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion; |
||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
|
||||
|
namespace FileStorage.Migrations |
||||
|
{ |
||||
|
[DbContext(typeof(BaseServiceMigrationDbContext))] |
||||
|
[Migration("20210127044859_127-2")] |
||||
|
partial class _1272 |
||||
|
{ |
||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder) |
||||
|
{ |
||||
|
#pragma warning disable 612, 618
|
||||
|
modelBuilder |
||||
|
.UseIdentityColumns() |
||||
|
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) |
||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128) |
||||
|
.HasAnnotation("ProductVersion", "5.0.0"); |
||||
|
|
||||
|
modelBuilder.Entity("FileStorage.Models.UploadFileInfo", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasMaxLength(40) |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasColumnName("ConcurrencyStamp"); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnType("datetime2") |
||||
|
.HasColumnName("CreationTime"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnType("uniqueidentifier") |
||||
|
.HasColumnName("CreatorId"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)") |
||||
|
.HasColumnName("ExtraProperties"); |
||||
|
|
||||
|
b.Property<string>("FileName") |
||||
|
.IsRequired() |
||||
|
.HasMaxLength(500) |
||||
|
.HasColumnType("nvarchar(500)"); |
||||
|
|
||||
|
b.Property<string>("FileUrl") |
||||
|
.IsRequired() |
||||
|
.HasMaxLength(256) |
||||
|
.HasColumnType("nvarchar(256)"); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("bit") |
||||
|
.HasDefaultValue(false) |
||||
|
.HasColumnName("IsDeleted"); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnType("datetime2") |
||||
|
.HasColumnName("LastModificationTime"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnType("uniqueidentifier") |
||||
|
.HasColumnName("LastModifierId"); |
||||
|
|
||||
|
b.Property<string>("Md5Code") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<long?>("Size") |
||||
|
.HasColumnType("bigint"); |
||||
|
|
||||
|
b.Property<string>("Suffix") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<Guid?>("TenantId") |
||||
|
.HasColumnType("uniqueidentifier") |
||||
|
.HasColumnName("TenantId"); |
||||
|
|
||||
|
b.Property<int>("Type") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("FileName"); |
||||
|
|
||||
|
b.ToTable("file_info"); |
||||
|
}); |
||||
|
#pragma warning restore 612, 618
|
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,66 @@ |
|||||
|
using System; |
||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
|
||||
|
namespace FileStorage.Migrations |
||||
|
{ |
||||
|
public partial class _1272 : Migration |
||||
|
{ |
||||
|
protected override void Up(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
//migrationBuilder.DropTable(
|
||||
|
// name: "AbpBlobs");
|
||||
|
|
||||
|
//migrationBuilder.DropTable(
|
||||
|
// name: "AbpBlobContainers");
|
||||
|
} |
||||
|
|
||||
|
protected override void Down(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpBlobContainers", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
Name = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false), |
||||
|
TempId1 = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.UniqueConstraint("AK_AbpBlobContainers_TempId1", x => x.TempId1); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpBlobs", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ContainerId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
Name = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false), |
||||
|
Content = table.Column<byte[]>(type: "varbinary(max)", maxLength: 2147483647, nullable: true), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpBlobs_AbpBlobContainers_ContainerId", |
||||
|
column: x => x.ContainerId, |
||||
|
principalTable: "AbpBlobContainers", |
||||
|
principalColumn: "TempId1", |
||||
|
onDelete: ReferentialAction.Restrict); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpBlobContainers_TenantId_Name", |
||||
|
table: "AbpBlobContainers", |
||||
|
columns: new[] { "TenantId", "Name" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpBlobs_TenantId_ContainerId_Name", |
||||
|
table: "AbpBlobs", |
||||
|
columns: new[] { "TenantId", "ContainerId", "Name" }); |
||||
|
} |
||||
|
} |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,804 @@ |
|||||
|
using System; |
||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
|
||||
|
namespace FileStorage.Migrations |
||||
|
{ |
||||
|
public partial class data0222 : Migration |
||||
|
{ |
||||
|
protected override void Up(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpAuditLogs", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
ApplicationName = table.Column<string>(type: "nvarchar(96)", maxLength: 96, nullable: true), |
||||
|
UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
UserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
TenantName = table.Column<string>(type: "nvarchar(max)", nullable: true), |
||||
|
ImpersonatorUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
ImpersonatorTenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
ExecutionTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
ExecutionDuration = table.Column<int>(type: "int", nullable: false), |
||||
|
ClientIpAddress = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true), |
||||
|
ClientName = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: true), |
||||
|
ClientId = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true), |
||||
|
CorrelationId = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true), |
||||
|
BrowserInfo = table.Column<string>(type: "nvarchar(512)", maxLength: 512, nullable: true), |
||||
|
HttpMethod = table.Column<string>(type: "nvarchar(16)", maxLength: 16, nullable: true), |
||||
|
Url = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true), |
||||
|
Exceptions = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: true), |
||||
|
Comments = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true), |
||||
|
HttpStatusCode = table.Column<int>(type: "int", nullable: true), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpAuditLogs", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpClaimTypes", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
Name = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false), |
||||
|
Required = table.Column<bool>(type: "bit", nullable: false), |
||||
|
IsStatic = table.Column<bool>(type: "bit", nullable: false), |
||||
|
Regex = table.Column<string>(type: "nvarchar(512)", maxLength: 512, nullable: true), |
||||
|
RegexDescription = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: true), |
||||
|
Description = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true), |
||||
|
ValueType = table.Column<int>(type: "int", nullable: false), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpClaimTypes", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpLinkUsers", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
SourceUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
SourceTenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
TargetUserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TargetTenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpLinkUsers", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpOrganizationUnits", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
ParentId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
Code = table.Column<string>(type: "nvarchar(95)", maxLength: 95, nullable: false), |
||||
|
DisplayName = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true), |
||||
|
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true), |
||||
|
LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
IsDeleted = table.Column<bool>(type: "bit", nullable: false, defaultValue: false), |
||||
|
DeleterId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
DeletionTime = table.Column<DateTime>(type: "datetime2", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpOrganizationUnits", x => x.Id); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpOrganizationUnits_AbpOrganizationUnits_ParentId", |
||||
|
column: x => x.ParentId, |
||||
|
principalTable: "AbpOrganizationUnits", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Restrict); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpPermissionGrants", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
Name = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false), |
||||
|
ProviderName = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false), |
||||
|
ProviderKey = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpRoles", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
Name = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false), |
||||
|
NormalizedName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false), |
||||
|
IsDefault = table.Column<bool>(type: "bit", nullable: false), |
||||
|
IsStatic = table.Column<bool>(type: "bit", nullable: false), |
||||
|
IsPublic = table.Column<bool>(type: "bit", nullable: false), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpRoles", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpSecurityLogs", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
ApplicationName = table.Column<string>(type: "nvarchar(96)", maxLength: 96, nullable: true), |
||||
|
Identity = table.Column<string>(type: "nvarchar(96)", maxLength: 96, nullable: true), |
||||
|
Action = table.Column<string>(type: "nvarchar(96)", maxLength: 96, nullable: true), |
||||
|
UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
UserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true), |
||||
|
TenantName = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true), |
||||
|
ClientId = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true), |
||||
|
CorrelationId = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true), |
||||
|
ClientIpAddress = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true), |
||||
|
BrowserInfo = table.Column<string>(type: "nvarchar(512)", maxLength: 512, nullable: true), |
||||
|
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpSecurityLogs", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpSettings", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
Name = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false), |
||||
|
Value = table.Column<string>(type: "nvarchar(2048)", maxLength: 2048, nullable: false), |
||||
|
ProviderName = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true), |
||||
|
ProviderKey = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpSettings", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpTenants", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
Name = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true), |
||||
|
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true), |
||||
|
LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
IsDeleted = table.Column<bool>(type: "bit", nullable: false, defaultValue: false), |
||||
|
DeleterId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
DeletionTime = table.Column<DateTime>(type: "datetime2", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpTenants", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpUsers", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
UserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false), |
||||
|
NormalizedUserName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false), |
||||
|
Name = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true), |
||||
|
Surname = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: true), |
||||
|
Email = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false), |
||||
|
NormalizedEmail = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false), |
||||
|
EmailConfirmed = table.Column<bool>(type: "bit", nullable: false, defaultValue: false), |
||||
|
PasswordHash = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true), |
||||
|
SecurityStamp = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false), |
||||
|
IsExternal = table.Column<bool>(type: "bit", nullable: false, defaultValue: false), |
||||
|
PhoneNumber = table.Column<string>(type: "nvarchar(16)", maxLength: 16, nullable: true), |
||||
|
PhoneNumberConfirmed = table.Column<bool>(type: "bit", nullable: false, defaultValue: false), |
||||
|
TwoFactorEnabled = table.Column<bool>(type: "bit", nullable: false, defaultValue: false), |
||||
|
LockoutEnd = table.Column<DateTimeOffset>(type: "datetimeoffset", nullable: true), |
||||
|
LockoutEnabled = table.Column<bool>(type: "bit", nullable: false, defaultValue: false), |
||||
|
AccessFailedCount = table.Column<int>(type: "int", nullable: false, defaultValue: 0), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true), |
||||
|
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true), |
||||
|
LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
IsDeleted = table.Column<bool>(type: "bit", nullable: false, defaultValue: false), |
||||
|
DeleterId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
DeletionTime = table.Column<DateTime>(type: "datetime2", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpUsers", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "base_branches", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
CategoryId = table.Column<short>(type: "smallint", nullable: false), |
||||
|
Pid = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
Name = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false), |
||||
|
FullName = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false), |
||||
|
Sort = table.Column<int>(type: "int", nullable: false), |
||||
|
Enabled = table.Column<bool>(type: "bit", nullable: false, defaultValue: false), |
||||
|
IsDeleted = table.Column<bool>(type: "bit", nullable: false, defaultValue: false), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true), |
||||
|
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true), |
||||
|
LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_base_branches", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "base_user_branches", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
BranchId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
IsDeleted = table.Column<bool>(type: "bit", nullable: false, defaultValue: false), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(type: "nvarchar(40)", maxLength: 40, nullable: true), |
||||
|
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
LastModificationTime = table.Column<DateTime>(type: "datetime2", nullable: true), |
||||
|
LastModifierId = table.Column<Guid>(type: "uniqueidentifier", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_base_user_branches", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpAuditLogActions", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
AuditLogId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
ServiceName = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: true), |
||||
|
MethodName = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: true), |
||||
|
Parameters = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: true), |
||||
|
ExecutionTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
ExecutionDuration = table.Column<int>(type: "int", nullable: false), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpAuditLogActions", x => x.Id); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpAuditLogActions_AbpAuditLogs_AuditLogId", |
||||
|
column: x => x.AuditLogId, |
||||
|
principalTable: "AbpAuditLogs", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpEntityChanges", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
AuditLogId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
ChangeTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
ChangeType = table.Column<byte>(type: "tinyint", nullable: false), |
||||
|
EntityTenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
EntityId = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false), |
||||
|
EntityTypeFullName = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false), |
||||
|
ExtraProperties = table.Column<string>(type: "nvarchar(max)", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpEntityChanges", x => x.Id); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpEntityChanges_AbpAuditLogs_AuditLogId", |
||||
|
column: x => x.AuditLogId, |
||||
|
principalTable: "AbpAuditLogs", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpOrganizationUnitRoles", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
RoleId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
OrganizationUnitId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpOrganizationUnitRoles", x => new { x.OrganizationUnitId, x.RoleId }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpOrganizationUnitRoles_AbpOrganizationUnits_OrganizationUnitId", |
||||
|
column: x => x.OrganizationUnitId, |
||||
|
principalTable: "AbpOrganizationUnits", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpOrganizationUnitRoles_AbpRoles_RoleId", |
||||
|
column: x => x.RoleId, |
||||
|
principalTable: "AbpRoles", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpRoleClaims", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
RoleId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
ClaimType = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false), |
||||
|
ClaimValue = table.Column<string>(type: "nvarchar(1024)", maxLength: 1024, nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpRoleClaims", x => x.Id); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpRoleClaims_AbpRoles_RoleId", |
||||
|
column: x => x.RoleId, |
||||
|
principalTable: "AbpRoles", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpTenantConnectionStrings", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
Name = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false), |
||||
|
Value = table.Column<string>(type: "nvarchar(1024)", maxLength: 1024, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpTenantConnectionStrings", x => new { x.TenantId, x.Name }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpTenantConnectionStrings_AbpTenants_TenantId", |
||||
|
column: x => x.TenantId, |
||||
|
principalTable: "AbpTenants", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpUserClaims", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
ClaimType = table.Column<string>(type: "nvarchar(256)", maxLength: 256, nullable: false), |
||||
|
ClaimValue = table.Column<string>(type: "nvarchar(1024)", maxLength: 1024, nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpUserClaims", x => x.Id); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpUserClaims_AbpUsers_UserId", |
||||
|
column: x => x.UserId, |
||||
|
principalTable: "AbpUsers", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpUserLogins", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
LoginProvider = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
ProviderKey = table.Column<string>(type: "nvarchar(196)", maxLength: 196, nullable: false), |
||||
|
ProviderDisplayName = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpUserLogins", x => new { x.UserId, x.LoginProvider }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpUserLogins_AbpUsers_UserId", |
||||
|
column: x => x.UserId, |
||||
|
principalTable: "AbpUsers", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpUserOrganizationUnits", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
OrganizationUnitId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpUserOrganizationUnits", x => new { x.OrganizationUnitId, x.UserId }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpUserOrganizationUnits_AbpOrganizationUnits_OrganizationUnitId", |
||||
|
column: x => x.OrganizationUnitId, |
||||
|
principalTable: "AbpOrganizationUnits", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpUserOrganizationUnits_AbpUsers_UserId", |
||||
|
column: x => x.UserId, |
||||
|
principalTable: "AbpUsers", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpUserRoles", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
RoleId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpUserRoles", x => new { x.UserId, x.RoleId }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpUserRoles_AbpRoles_RoleId", |
||||
|
column: x => x.RoleId, |
||||
|
principalTable: "AbpRoles", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpUserRoles_AbpUsers_UserId", |
||||
|
column: x => x.UserId, |
||||
|
principalTable: "AbpUsers", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpUserTokens", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
UserId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
LoginProvider = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false), |
||||
|
Name = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
Value = table.Column<string>(type: "nvarchar(max)", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpUserTokens", x => new { x.UserId, x.LoginProvider, x.Name }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpUserTokens_AbpUsers_UserId", |
||||
|
column: x => x.UserId, |
||||
|
principalTable: "AbpUsers", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "base_branch_role", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
RoleId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
BranchId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
CreationTime = table.Column<DateTime>(type: "datetime2", nullable: false), |
||||
|
CreatorId = table.Column<Guid>(type: "uniqueidentifier", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_base_branch_role", x => new { x.BranchId, x.RoleId }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_base_branch_role_base_branches_BranchId", |
||||
|
column: x => x.BranchId, |
||||
|
principalTable: "base_branches", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "base_user_branch_role", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
UserBranchId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
Id = table.Column<int>(type: "int", nullable: false) |
||||
|
.Annotation("SqlServer:Identity", "1, 1"), |
||||
|
RoleId = table.Column<Guid>(type: "uniqueidentifier", nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_base_user_branch_role", x => new { x.UserBranchId, x.Id }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_base_user_branch_role_base_user_branches_UserBranchId", |
||||
|
column: x => x.UserBranchId, |
||||
|
principalTable: "base_user_branches", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "AbpEntityPropertyChanges", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
TenantId = table.Column<Guid>(type: "uniqueidentifier", nullable: true), |
||||
|
EntityChangeId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
NewValue = table.Column<string>(type: "nvarchar(512)", maxLength: 512, nullable: true), |
||||
|
OriginalValue = table.Column<string>(type: "nvarchar(512)", maxLength: 512, nullable: true), |
||||
|
PropertyName = table.Column<string>(type: "nvarchar(128)", maxLength: 128, nullable: false), |
||||
|
PropertyTypeFullName = table.Column<string>(type: "nvarchar(64)", maxLength: 64, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_AbpEntityPropertyChanges", x => x.Id); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId", |
||||
|
column: x => x.EntityChangeId, |
||||
|
principalTable: "AbpEntityChanges", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpAuditLogActions_AuditLogId", |
||||
|
table: "AbpAuditLogActions", |
||||
|
column: "AuditLogId"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpAuditLogActions_TenantId_ServiceName_MethodName_ExecutionTime", |
||||
|
table: "AbpAuditLogActions", |
||||
|
columns: new[] { "TenantId", "ServiceName", "MethodName", "ExecutionTime" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpAuditLogs_TenantId_ExecutionTime", |
||||
|
table: "AbpAuditLogs", |
||||
|
columns: new[] { "TenantId", "ExecutionTime" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpAuditLogs_TenantId_UserId_ExecutionTime", |
||||
|
table: "AbpAuditLogs", |
||||
|
columns: new[] { "TenantId", "UserId", "ExecutionTime" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpEntityChanges_AuditLogId", |
||||
|
table: "AbpEntityChanges", |
||||
|
column: "AuditLogId"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpEntityChanges_TenantId_EntityTypeFullName_EntityId", |
||||
|
table: "AbpEntityChanges", |
||||
|
columns: new[] { "TenantId", "EntityTypeFullName", "EntityId" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpEntityPropertyChanges_EntityChangeId", |
||||
|
table: "AbpEntityPropertyChanges", |
||||
|
column: "EntityChangeId"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpLinkUsers_SourceUserId_SourceTenantId_TargetUserId_TargetTenantId", |
||||
|
table: "AbpLinkUsers", |
||||
|
columns: new[] { "SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId" }, |
||||
|
unique: true, |
||||
|
filter: "[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpOrganizationUnitRoles_RoleId_OrganizationUnitId", |
||||
|
table: "AbpOrganizationUnitRoles", |
||||
|
columns: new[] { "RoleId", "OrganizationUnitId" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpOrganizationUnits_Code", |
||||
|
table: "AbpOrganizationUnits", |
||||
|
column: "Code"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpOrganizationUnits_ParentId", |
||||
|
table: "AbpOrganizationUnits", |
||||
|
column: "ParentId"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpPermissionGrants_Name_ProviderName_ProviderKey", |
||||
|
table: "AbpPermissionGrants", |
||||
|
columns: new[] { "Name", "ProviderName", "ProviderKey" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpRoleClaims_RoleId", |
||||
|
table: "AbpRoleClaims", |
||||
|
column: "RoleId"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpRoles_NormalizedName", |
||||
|
table: "AbpRoles", |
||||
|
column: "NormalizedName"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpSecurityLogs_TenantId_Action", |
||||
|
table: "AbpSecurityLogs", |
||||
|
columns: new[] { "TenantId", "Action" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpSecurityLogs_TenantId_ApplicationName", |
||||
|
table: "AbpSecurityLogs", |
||||
|
columns: new[] { "TenantId", "ApplicationName" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpSecurityLogs_TenantId_Identity", |
||||
|
table: "AbpSecurityLogs", |
||||
|
columns: new[] { "TenantId", "Identity" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpSecurityLogs_TenantId_UserId", |
||||
|
table: "AbpSecurityLogs", |
||||
|
columns: new[] { "TenantId", "UserId" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpSettings_Name_ProviderName_ProviderKey", |
||||
|
table: "AbpSettings", |
||||
|
columns: new[] { "Name", "ProviderName", "ProviderKey" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpTenants_Name", |
||||
|
table: "AbpTenants", |
||||
|
column: "Name"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpUserClaims_UserId", |
||||
|
table: "AbpUserClaims", |
||||
|
column: "UserId"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpUserLogins_LoginProvider_ProviderKey", |
||||
|
table: "AbpUserLogins", |
||||
|
columns: new[] { "LoginProvider", "ProviderKey" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpUserOrganizationUnits_UserId_OrganizationUnitId", |
||||
|
table: "AbpUserOrganizationUnits", |
||||
|
columns: new[] { "UserId", "OrganizationUnitId" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpUserRoles_RoleId_UserId", |
||||
|
table: "AbpUserRoles", |
||||
|
columns: new[] { "RoleId", "UserId" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpUsers_Email", |
||||
|
table: "AbpUsers", |
||||
|
column: "Email"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpUsers_NormalizedEmail", |
||||
|
table: "AbpUsers", |
||||
|
column: "NormalizedEmail"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpUsers_NormalizedUserName", |
||||
|
table: "AbpUsers", |
||||
|
column: "NormalizedUserName"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_AbpUsers_UserName", |
||||
|
table: "AbpUsers", |
||||
|
column: "UserName"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_base_branches_Pid", |
||||
|
table: "base_branches", |
||||
|
column: "Pid"); |
||||
|
} |
||||
|
|
||||
|
protected override void Down(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpAuditLogActions"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpClaimTypes"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpEntityPropertyChanges"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpLinkUsers"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpOrganizationUnitRoles"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpPermissionGrants"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpRoleClaims"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpSecurityLogs"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpSettings"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpTenantConnectionStrings"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpUserClaims"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpUserLogins"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpUserOrganizationUnits"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpUserRoles"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpUserTokens"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "base_branch_role"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "base_user_branch_role"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpEntityChanges"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpTenants"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpOrganizationUnits"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpRoles"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpUsers"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "base_branches"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "base_user_branches"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "AbpAuditLogs"); |
||||
|
} |
||||
|
} |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,45 @@ |
|||||
|
using System; |
||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
|
||||
|
namespace FileStorage.Migrations |
||||
|
{ |
||||
|
public partial class data228 : Migration |
||||
|
{ |
||||
|
protected override void Up(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.AddColumn<string>( |
||||
|
name: "CascadeId", |
||||
|
table: "base_branches", |
||||
|
type: "nvarchar(max)", |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<bool>( |
||||
|
name: "Leaf", |
||||
|
table: "base_branches", |
||||
|
type: "bit", |
||||
|
nullable: false, |
||||
|
defaultValue: false); |
||||
|
|
||||
|
migrationBuilder.AddColumn<Guid>( |
||||
|
name: "TenantId", |
||||
|
table: "base_branches", |
||||
|
type: "uniqueidentifier", |
||||
|
nullable: true); |
||||
|
} |
||||
|
|
||||
|
protected override void Down(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "CascadeId", |
||||
|
table: "base_branches"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "Leaf", |
||||
|
table: "base_branches"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "TenantId", |
||||
|
table: "base_branches"); |
||||
|
} |
||||
|
} |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,24 @@ |
|||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
|
||||
|
namespace FileStorage.Migrations |
||||
|
{ |
||||
|
public partial class data20210305 : Migration |
||||
|
{ |
||||
|
protected override void Up(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "IsDeleted", |
||||
|
table: "base_user_branches"); |
||||
|
} |
||||
|
|
||||
|
protected override void Down(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.AddColumn<bool>( |
||||
|
name: "IsDeleted", |
||||
|
table: "base_user_branches", |
||||
|
type: "bit", |
||||
|
nullable: false, |
||||
|
defaultValue: false); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,64 @@ |
|||||
|
using System; |
||||
|
using System.IO; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.Extensions.Configuration; |
||||
|
using Microsoft.Extensions.Hosting; |
||||
|
using Serilog; |
||||
|
using Serilog.Events; |
||||
|
// using Serilog.Sinks.Elasticsearch;
|
||||
|
|
||||
|
namespace BaseService |
||||
|
{ |
||||
|
public class Program |
||||
|
{ |
||||
|
public static int Main(string[] args) |
||||
|
{ |
||||
|
var configuration = new ConfigurationBuilder() |
||||
|
.SetBasePath(Directory.GetCurrentDirectory()) |
||||
|
.AddJsonFile("appsettings.json") |
||||
|
.AddEnvironmentVariables() |
||||
|
.Build(); |
||||
|
|
||||
|
Log.Logger = new LoggerConfiguration() |
||||
|
.MinimumLevel.Debug() |
||||
|
.MinimumLevel.Override("Microsoft", LogEventLevel.Information) |
||||
|
.Enrich.WithProperty("Application", "BaseService") |
||||
|
.Enrich.FromLogContext() |
||||
|
.WriteTo.File("Logs/logs.txt") |
||||
|
// .WriteTo.Elasticsearch(
|
||||
|
// new ElasticsearchSinkOptions(new Uri(configuration["ElasticSearch:Url"]))
|
||||
|
// {
|
||||
|
// AutoRegisterTemplate = true,
|
||||
|
// AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv6,
|
||||
|
// IndexFormat = "xdl-log-{0:yyyy.MM}"
|
||||
|
// })
|
||||
|
.WriteTo.Console() |
||||
|
.CreateLogger(); |
||||
|
|
||||
|
try |
||||
|
{ |
||||
|
Log.Information("Starting BaseService.Host."); |
||||
|
CreateHostBuilder(args).Build().Run(); |
||||
|
return 0; |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
Log.Fatal(ex, "BaseService.Host terminated unexpectedly!"); |
||||
|
return 1; |
||||
|
} |
||||
|
finally |
||||
|
{ |
||||
|
Log.CloseAndFlush(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
internal static IHostBuilder CreateHostBuilder(string[] args) => |
||||
|
Microsoft.Extensions.Hosting.Host.CreateDefaultBuilder(args) |
||||
|
.ConfigureWebHostDefaults(webBuilder => |
||||
|
{ |
||||
|
webBuilder.UseStartup<Startup>(); |
||||
|
}) |
||||
|
.UseAutofac() |
||||
|
.UseSerilog(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,27 @@ |
|||||
|
{ |
||||
|
"iisSettings": { |
||||
|
"windowsAuthentication": false, |
||||
|
"anonymousAuthentication": true, |
||||
|
"iisExpress": { |
||||
|
"applicationUrl": "http://localhost:10130", |
||||
|
"sslPort": 0 |
||||
|
} |
||||
|
}, |
||||
|
"profiles": { |
||||
|
"IIS Express": { |
||||
|
"commandName": "IISExpress", |
||||
|
"launchBrowser": true, |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
} |
||||
|
}, |
||||
|
"BaseService.Host": { |
||||
|
"commandName": "Project", |
||||
|
"launchBrowser": true, |
||||
|
"applicationUrl": "http://localhost:10130", |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
using Microsoft.AspNetCore.Builder; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Microsoft.Extensions.Logging; |
||||
|
|
||||
|
namespace BaseService |
||||
|
{ |
||||
|
public class Startup |
||||
|
{ |
||||
|
public void ConfigureServices(IServiceCollection services) |
||||
|
{ |
||||
|
services.AddApplication<BaseServiceHostModule>(); |
||||
|
} |
||||
|
|
||||
|
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) |
||||
|
{ |
||||
|
app.InitializeApplication(); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
{ |
||||
|
"Logging": { |
||||
|
"LogLevel": { |
||||
|
"Default": "Information", |
||||
|
"Microsoft": "Warning", |
||||
|
"Microsoft.Hosting.Lifetime": "Information" |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,39 @@ |
|||||
|
{ |
||||
|
"AuthServer": { |
||||
|
"Authority": "http://localhost:10100", |
||||
|
"ApiName": "IdentityService" |
||||
|
}, |
||||
|
"App": { |
||||
|
"CorsOrigins": "http://localhost:9527,http://localhost:9528" |
||||
|
}, |
||||
|
"ConnectionStrings": { |
||||
|
"Default": "Server=124.220.28.250;Database=ABP;User ID=sa;Password=Microsoft2008;" |
||||
|
//"Default": "Server=192.168.0.140;Database=ABP;User ID=sa;Password=Microsoft@2021;" |
||||
|
// "Default": "Server=LAPTOP-V3U07C2O;Database=ABP;User ID=sa;Password=1q2w!@#;" |
||||
|
//"Default": "Server=114.116.225.148,13314;Database=ABP;User ID=sa;Password=Microsoft2020;" |
||||
|
}, |
||||
|
"ElasticSearch": { |
||||
|
"Url": "http://localhost:9200" |
||||
|
}, |
||||
|
"Redis": { |
||||
|
"Configuration": "127.0.0.1" |
||||
|
}, |
||||
|
"Logging": { |
||||
|
"LogLevel": { |
||||
|
"Default": "Warning" |
||||
|
} |
||||
|
}, |
||||
|
//"Settings": { |
||||
|
// "Abp.Localization.DefaultLanguage": "zh-Hans", |
||||
|
// "Abp.Identity.Password.RequireNonAlphanumeric": "false", //去掉非字母限制 |
||||
|
// "Abp.Identity.Password.RequireUppercase": "false", //去掉大写限制 |
||||
|
// "Abp.Identity.Password.RequireLowercase": "false", //去掉小写 |
||||
|
// "Abp.Identity.Password.RequiredLength": "1", |
||||
|
// "Abp.Identity.SignIn.RequireConfirmedEmail": "true", |
||||
|
// //设置用户锁定 |
||||
|
// "Abp.Identity.Lockout.AllowedForNewUsers": "true", |
||||
|
// "Abp.Identity.Lockout.MaxFailedAccessAttempts": "3" |
||||
|
//}, |
||||
|
"AllowedHosts": "*", |
||||
|
"Urls": "http://*:8055" |
||||
|
} |
@ -0,0 +1,14 @@ |
|||||
|
<?xml version="1.0"?> |
||||
|
<doc> |
||||
|
<assembly> |
||||
|
<name>BaseService.Host</name> |
||||
|
</assembly> |
||||
|
<members> |
||||
|
<member name="M:BaseService.BaseServiceHostModule.ConfigurePasswordSet(Volo.Abp.Modularity.ServiceConfigurationContext)"> |
||||
|
<summary> |
||||
|
设置密码强度 |
||||
|
</summary> |
||||
|
<param name="context"></param> |
||||
|
</member> |
||||
|
</members> |
||||
|
</doc> |
@ -0,0 +1,14 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk"> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<OutputType>Library</OutputType> |
||||
|
<TargetFramework>net5.0</TargetFramework> |
||||
|
<ApplicationIcon /> |
||||
|
<StartupObject /> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="Volo.Abp.Settings" Version="4.3.3" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
</Project> |
@ -0,0 +1 @@ |
|||||
|
|
@ -0,0 +1,70 @@ |
|||||
|
//using BaseService.Controllers;
|
||||
|
//using Microsoft.AspNetCore.Mvc;
|
||||
|
//using System;
|
||||
|
//using System.Collections.Generic;
|
||||
|
//using System.Text;
|
||||
|
//using System.Threading.Tasks;
|
||||
|
//using BaseService.BaseData.UserBranchRoleManagement;
|
||||
|
//using BaseService.BaseData.UserBranchRoleManagement.Dto;
|
||||
|
//using Volo.Abp.Application.Dtos;
|
||||
|
|
||||
|
//namespace BaseService.HttpApi.BaseData
|
||||
|
//{
|
||||
|
// [Area("base")]
|
||||
|
// [Route("api/base/userBranchRole")]
|
||||
|
// public class UserBranchRoleController : BaseServiceController, IUserBranchAppService
|
||||
|
// {
|
||||
|
// private readonly IUserBranchAppService _jobAppService;
|
||||
|
|
||||
|
// public UserBranchRoleController(IUserBranchAppService jobAppService)
|
||||
|
// {
|
||||
|
// _jobAppService = jobAppService;
|
||||
|
// }
|
||||
|
|
||||
|
// [HttpPost]
|
||||
|
// public Task<UserBranchDto> CreateAsync(CreateOrUpdateUserBranchDto input)
|
||||
|
// {
|
||||
|
// return _jobAppService.CreateAsync(input);
|
||||
|
// }
|
||||
|
|
||||
|
// [HttpPost]
|
||||
|
// [Route("delete")]
|
||||
|
// public Task DeleteAsync(List<Guid> ids)
|
||||
|
// {
|
||||
|
// return _jobAppService.DeleteAsync(ids);
|
||||
|
// }
|
||||
|
|
||||
|
// /// <summary>
|
||||
|
// /// 获取单条数据
|
||||
|
// /// </summary>
|
||||
|
// /// <param name="id"></param>
|
||||
|
// /// <returns></returns>
|
||||
|
// [HttpGet]
|
||||
|
// [Route("{id}")]
|
||||
|
// public Task<UserBranchDto> GetAsync(Guid id)
|
||||
|
// {
|
||||
|
// return _jobAppService.GetAsync(id);
|
||||
|
// }
|
||||
|
|
||||
|
// [HttpGet]
|
||||
|
// [Route("all")]
|
||||
|
// public Task<PagedResultDto<UserBranchDto>> GetPagedListAsync(GetUserBranchInput input)
|
||||
|
// {
|
||||
|
// return _jobAppService.GetPagedListAsync(input);
|
||||
|
// }
|
||||
|
|
||||
|
// //[HttpGet]
|
||||
|
// //[Route("userbranchroles")]
|
||||
|
// //public Task<ListResultDto<UserBranchDto>> GetAllAsync()
|
||||
|
// //{
|
||||
|
// // return _jobAppService.GetAllAsync();
|
||||
|
// //}
|
||||
|
|
||||
|
// [HttpPut]
|
||||
|
// [Route("{id}")]
|
||||
|
// public Task<UserBranchDto> UpdateAsync(Guid id, CreateOrUpdateUserBranchDto input)
|
||||
|
// {
|
||||
|
// return _jobAppService.UpdateAsync(id, input);
|
||||
|
// }
|
||||
|
// }
|
||||
|
//}
|
@ -0,0 +1,19 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk"> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<OutputType>Library</OutputType> |
||||
|
<TargetFramework>net5.0</TargetFramework> |
||||
|
<ApplicationIcon /> |
||||
|
<StartupObject /> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="Volo.Abp.AspNetCore.Mvc" Version="4.3.3" /> |
||||
|
<PackageReference Include="Volo.Abp.Settings" Version="4.3.3" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<ProjectReference Include="..\BaseService.Application.Contracts\BaseService.Application.Contracts.csproj" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
</Project> |
@ -0,0 +1,165 @@ |
|||||
|
<?xml version="1.0"?> |
||||
|
<doc> |
||||
|
<assembly> |
||||
|
<name>BaseService.HttpApi</name> |
||||
|
</assembly> |
||||
|
<members> |
||||
|
<member name="T:BaseService.BaseData.BranchController"> |
||||
|
<summary> |
||||
|
分支管理 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="M:BaseService.BaseData.BranchController.#ctor(BaseService.BaseData.BranchManagement.IBranchAppService)"> |
||||
|
<summary> |
||||
|
分支管理-依赖注入 |
||||
|
</summary> |
||||
|
<param name="branchAppService"></param> |
||||
|
</member> |
||||
|
<member name="M:BaseService.BaseData.BranchController.Create(BaseService.BaseData.BranchManagement.Dto.CreateOrUpdateBranchDto)"> |
||||
|
<summary> |
||||
|
创建分支信息 |
||||
|
</summary> |
||||
|
<param name="input">输入项</param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.BaseData.BranchController.Delete(System.Collections.Generic.List{System.Guid})"> |
||||
|
<summary> |
||||
|
删除操作(支持批量删除) |
||||
|
</summary> |
||||
|
<param name="ids">传入的id集合</param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.BaseData.BranchController.Get(System.Guid)"> |
||||
|
<summary> |
||||
|
根据id获取分支的单条信息 |
||||
|
</summary> |
||||
|
<param name="id">分支id</param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.BaseData.BranchController.GetAll(BaseService.BaseData.BranchManagement.Dto.GetBranchInputDto)"> |
||||
|
<summary> |
||||
|
获取全部分支信息(支持分页) |
||||
|
</summary> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.BaseData.BranchController.LoadAll(System.Nullable{System.Guid},System.String)"> |
||||
|
<summary> |
||||
|
获取全部分支信息(不支持分页) |
||||
|
</summary> |
||||
|
<param name="id">传入的分支id</param> |
||||
|
<param name="filter">过滤条件</param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.BaseData.BranchController.LoadAllNodes"> |
||||
|
<summary> |
||||
|
获取树形结构数据 |
||||
|
</summary> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.BaseData.BranchController.Update(System.Guid,BaseService.BaseData.BranchManagement.Dto.CreateOrUpdateBranchDto)"> |
||||
|
<summary> |
||||
|
修改分支操作 |
||||
|
</summary> |
||||
|
<param name="id"></param> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.BaseData.BranchController.LoadAllRolesByBranchId(System.Guid)"> |
||||
|
<summary> |
||||
|
根据分支ID获取分支对应的角色信息 |
||||
|
</summary> |
||||
|
<param name="rolesbybranchId">分支</param> |
||||
|
<returns></returns>ID |
||||
|
</member> |
||||
|
<member name="M:BaseService.BaseData.BranchController.GetListByBranchIdAsync(System.Guid,Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto)"> |
||||
|
<summary> |
||||
|
根据分支ID,查对应的权限列表 |
||||
|
</summary> |
||||
|
<param name="rolesbybranchId">分支ID</param> |
||||
|
<param name="input">分页查询</param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.HttpApi.BaseData.UserBranchRoleController.Get(System.Guid)"> |
||||
|
<summary> |
||||
|
获取单条数据 |
||||
|
</summary> |
||||
|
<param name="id"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="T:BaseService.HttpApi.Systems.UserController"> |
||||
|
<summary> |
||||
|
用户管理 |
||||
|
</summary> |
||||
|
</member> |
||||
|
<member name="M:BaseService.HttpApi.Systems.UserController.#ctor(BaseService.Systems.UserManagement.IUserAppService)"> |
||||
|
<summary> |
||||
|
构造函数 |
||||
|
</summary> |
||||
|
<param name="userAppService"></param> |
||||
|
</member> |
||||
|
<member name="M:BaseService.HttpApi.Systems.UserController.Create(Volo.Abp.Identity.IdentityUserCreateDto)"> |
||||
|
<summary> |
||||
|
创建用户信息 |
||||
|
</summary> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.HttpApi.Systems.UserController.Get(System.Guid)"> |
||||
|
<summary> |
||||
|
根据用户ID获取用户信息 |
||||
|
</summary> |
||||
|
<param name="id">分支ID</param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.HttpApi.Systems.UserController.GetCurrentUserInfo"> |
||||
|
<summary> |
||||
|
获取当前登录用户的信息 |
||||
|
</summary> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.HttpApi.Systems.UserController.GetAll(Volo.Abp.Identity.GetIdentityUsersInput)"> |
||||
|
<summary> |
||||
|
获取所有用户信息(分页操作) |
||||
|
</summary> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.HttpApi.Systems.UserController.UpdateAsync(System.Guid,Volo.Abp.Identity.IdentityUserUpdateDto)"> |
||||
|
<summary> |
||||
|
根据用户ID进行修改操作 |
||||
|
</summary> |
||||
|
<param name="id">用户ID</param> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.HttpApi.Systems.UserController.LoadAllBranchesByUserId(System.Guid)"> |
||||
|
<summary> |
||||
|
根据当前登录用户ID获取其所有分支信息 |
||||
|
</summary> |
||||
|
<param name="rolesbyuserId">用户ID</param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.HttpApi.Systems.UserController.GetAuthConfigAsync(System.Guid)"> |
||||
|
<summary> |
||||
|
根据当前登录用户的分支ID,获取权限信息 |
||||
|
</summary> |
||||
|
<param name="branchId">分支ID</param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.HttpApi.Systems.UserController.LoadAllCurrentUserBranches"> |
||||
|
<summary> |
||||
|
获取当前登录用户的所有分支信息 |
||||
|
</summary> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
<member name="M:BaseService.HttpApi.Systems.UserController.ResetPasswordCurrentUser(System.Guid)"> |
||||
|
<summary> |
||||
|
重置密码功能 |
||||
|
</summary> |
||||
|
<param name="id"></param> |
||||
|
<param name="input"></param> |
||||
|
<returns></returns> |
||||
|
</member> |
||||
|
</members> |
||||
|
</doc> |
@ -0,0 +1,21 @@ |
|||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Volo.Abp.AspNetCore.Mvc; |
||||
|
using Volo.Abp.Modularity; |
||||
|
|
||||
|
namespace BaseService |
||||
|
{ |
||||
|
[DependsOn( |
||||
|
typeof(BaseServiceApplicationContractsModule), |
||||
|
typeof(AbpAspNetCoreMvcModule) |
||||
|
)] |
||||
|
public class BaseServiceHttpApiModule : AbpModule |
||||
|
{ |
||||
|
public override void PreConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
PreConfigure<IMvcBuilder>(mvcBuilder => |
||||
|
{ |
||||
|
mvcBuilder.AddApplicationPartIfNotExists(typeof(BaseServiceHttpApiModule).Assembly); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,13 @@ |
|||||
|
using BaseService.Localization; |
||||
|
using Volo.Abp.AspNetCore.Mvc; |
||||
|
|
||||
|
namespace BaseService.Controllers |
||||
|
{ |
||||
|
public abstract class BaseServiceController : AbpController |
||||
|
{ |
||||
|
protected BaseServiceController() |
||||
|
{ |
||||
|
LocalizationResource = typeof(BaseServiceResource); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,48 @@ |
|||||
|
//using BaseService.Controllers;
|
||||
|
//using BaseService.Systems.UserManagement;
|
||||
|
//using Microsoft.AspNetCore.Mvc;
|
||||
|
//using System;
|
||||
|
//using System.Threading.Tasks;
|
||||
|
//using Volo.Abp.Application.Dtos;
|
||||
|
//using Volo.Abp.Identity;
|
||||
|
|
||||
|
//namespace BaseService.HttpApi.Systems
|
||||
|
//{
|
||||
|
// [Area("base")]
|
||||
|
// [Route("api/base/user")]
|
||||
|
// public class UserController: BaseServiceController,IUserAppService
|
||||
|
// {
|
||||
|
// private readonly IUserAppService _userAppService;
|
||||
|
|
||||
|
// public UserController(IUserAppService userAppService)
|
||||
|
// {
|
||||
|
// _userAppService = userAppService;
|
||||
|
// }
|
||||
|
|
||||
|
// [HttpPost]
|
||||
|
// public Task<IdentityUserDto> Create(IdentityUserCreateDto input)
|
||||
|
// {
|
||||
|
// return _userAppService.Create(input);
|
||||
|
// }
|
||||
|
|
||||
|
// [HttpGet]
|
||||
|
// [Route("{id}")]
|
||||
|
// public Task<IdentityUserDto> Get(Guid id)
|
||||
|
// {
|
||||
|
// return _userAppService.Get(id);
|
||||
|
// }
|
||||
|
|
||||
|
// [HttpGet]
|
||||
|
// public Task<PagedResultDto<IdentityUserDto>> GetAll(GetIdentityUsersInput input)
|
||||
|
// {
|
||||
|
// return _userAppService.GetAll(input);
|
||||
|
// }
|
||||
|
|
||||
|
// [HttpPut]
|
||||
|
// [Route("{id}")]
|
||||
|
// public Task<IdentityUserDto> UpdateAsync(Guid id, IdentityUserUpdateDto input)
|
||||
|
// {
|
||||
|
// return _userAppService.UpdateAsync(id, input);
|
||||
|
// }
|
||||
|
// }
|
||||
|
//}
|
@ -0,0 +1,72 @@ |
|||||
|
|
||||
|
Microsoft Visual Studio Solution File, Format Version 12.00 |
||||
|
# Visual Studio Version 16 |
||||
|
VisualStudioVersion = 16.0.29326.143 |
||||
|
MinimumVisualStudioVersion = 10.0.40219.1 |
||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BaseService.Host", "BaseService.Host\BaseService.Host.csproj", "{42E8F7A4-592B-4BED-8F06-16487B1A3626}" |
||||
|
EndProject |
||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BaseService.Domain", "BaseService.Domain\BaseService.Domain.csproj", "{7DD4C936-0527-486E-AC94-AF8DDCB01AB4}" |
||||
|
EndProject |
||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BaseService.Application.Contracts", "BaseService.Application.Contracts\BaseService.Application.Contracts.csproj", "{9D96AE95-4F99-45DC-943F-AE53FDCCE2A4}" |
||||
|
EndProject |
||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BaseService.Application", "BaseService.Application\BaseService.Application.csproj", "{3B3DF78E-1120-4C16-A0F8-6220F8E42710}" |
||||
|
EndProject |
||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BaseService.EntityFrameworkCore", "BaseService.EntityFrameworkCore\BaseService.EntityFrameworkCore.csproj", "{4EB88A8D-20B5-45FA-94EA-88762BDCD89A}" |
||||
|
EndProject |
||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BaseService.HttpApi", "BaseService.HttpApi\BaseService.HttpApi.csproj", "{58888939-5192-4FF1-847E-487C47F2FFE9}" |
||||
|
EndProject |
||||
|
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BaseService.HttpApi.Client", "BaseService.HttpApi.Client\BaseService.HttpApi.Client.csproj", "{A1607874-E2BF-4B93-B81A-54505FCB5739}" |
||||
|
EndProject |
||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{25A38556-59BC-4516-A9F4-1ECE4FBF8438}" |
||||
|
EndProject |
||||
|
Global |
||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
||||
|
Debug|Any CPU = Debug|Any CPU |
||||
|
Release|Any CPU = Release|Any CPU |
||||
|
EndGlobalSection |
||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
||||
|
{42E8F7A4-592B-4BED-8F06-16487B1A3626}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
||||
|
{42E8F7A4-592B-4BED-8F06-16487B1A3626}.Debug|Any CPU.Build.0 = Debug|Any CPU |
||||
|
{42E8F7A4-592B-4BED-8F06-16487B1A3626}.Release|Any CPU.ActiveCfg = Release|Any CPU |
||||
|
{42E8F7A4-592B-4BED-8F06-16487B1A3626}.Release|Any CPU.Build.0 = Release|Any CPU |
||||
|
{7DD4C936-0527-486E-AC94-AF8DDCB01AB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
||||
|
{7DD4C936-0527-486E-AC94-AF8DDCB01AB4}.Debug|Any CPU.Build.0 = Debug|Any CPU |
||||
|
{7DD4C936-0527-486E-AC94-AF8DDCB01AB4}.Release|Any CPU.ActiveCfg = Release|Any CPU |
||||
|
{7DD4C936-0527-486E-AC94-AF8DDCB01AB4}.Release|Any CPU.Build.0 = Release|Any CPU |
||||
|
{9D96AE95-4F99-45DC-943F-AE53FDCCE2A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
||||
|
{9D96AE95-4F99-45DC-943F-AE53FDCCE2A4}.Debug|Any CPU.Build.0 = Debug|Any CPU |
||||
|
{9D96AE95-4F99-45DC-943F-AE53FDCCE2A4}.Release|Any CPU.ActiveCfg = Release|Any CPU |
||||
|
{9D96AE95-4F99-45DC-943F-AE53FDCCE2A4}.Release|Any CPU.Build.0 = Release|Any CPU |
||||
|
{3B3DF78E-1120-4C16-A0F8-6220F8E42710}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
||||
|
{3B3DF78E-1120-4C16-A0F8-6220F8E42710}.Debug|Any CPU.Build.0 = Debug|Any CPU |
||||
|
{3B3DF78E-1120-4C16-A0F8-6220F8E42710}.Release|Any CPU.ActiveCfg = Release|Any CPU |
||||
|
{3B3DF78E-1120-4C16-A0F8-6220F8E42710}.Release|Any CPU.Build.0 = Release|Any CPU |
||||
|
{4EB88A8D-20B5-45FA-94EA-88762BDCD89A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
||||
|
{4EB88A8D-20B5-45FA-94EA-88762BDCD89A}.Debug|Any CPU.Build.0 = Debug|Any CPU |
||||
|
{4EB88A8D-20B5-45FA-94EA-88762BDCD89A}.Release|Any CPU.ActiveCfg = Release|Any CPU |
||||
|
{4EB88A8D-20B5-45FA-94EA-88762BDCD89A}.Release|Any CPU.Build.0 = Release|Any CPU |
||||
|
{58888939-5192-4FF1-847E-487C47F2FFE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
||||
|
{58888939-5192-4FF1-847E-487C47F2FFE9}.Debug|Any CPU.Build.0 = Debug|Any CPU |
||||
|
{58888939-5192-4FF1-847E-487C47F2FFE9}.Release|Any CPU.ActiveCfg = Release|Any CPU |
||||
|
{58888939-5192-4FF1-847E-487C47F2FFE9}.Release|Any CPU.Build.0 = Release|Any CPU |
||||
|
{A1607874-E2BF-4B93-B81A-54505FCB5739}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
||||
|
{A1607874-E2BF-4B93-B81A-54505FCB5739}.Debug|Any CPU.Build.0 = Debug|Any CPU |
||||
|
{A1607874-E2BF-4B93-B81A-54505FCB5739}.Release|Any CPU.ActiveCfg = Release|Any CPU |
||||
|
{A1607874-E2BF-4B93-B81A-54505FCB5739}.Release|Any CPU.Build.0 = Release|Any CPU |
||||
|
EndGlobalSection |
||||
|
GlobalSection(SolutionProperties) = preSolution |
||||
|
HideSolutionNode = FALSE |
||||
|
EndGlobalSection |
||||
|
GlobalSection(NestedProjects) = preSolution |
||||
|
{42E8F7A4-592B-4BED-8F06-16487B1A3626} = {25A38556-59BC-4516-A9F4-1ECE4FBF8438} |
||||
|
{7DD4C936-0527-486E-AC94-AF8DDCB01AB4} = {25A38556-59BC-4516-A9F4-1ECE4FBF8438} |
||||
|
{9D96AE95-4F99-45DC-943F-AE53FDCCE2A4} = {25A38556-59BC-4516-A9F4-1ECE4FBF8438} |
||||
|
{3B3DF78E-1120-4C16-A0F8-6220F8E42710} = {25A38556-59BC-4516-A9F4-1ECE4FBF8438} |
||||
|
{4EB88A8D-20B5-45FA-94EA-88762BDCD89A} = {25A38556-59BC-4516-A9F4-1ECE4FBF8438} |
||||
|
{58888939-5192-4FF1-847E-487C47F2FFE9} = {25A38556-59BC-4516-A9F4-1ECE4FBF8438} |
||||
|
{A1607874-E2BF-4B93-B81A-54505FCB5739} = {25A38556-59BC-4516-A9F4-1ECE4FBF8438} |
||||
|
EndGlobalSection |
||||
|
GlobalSection(ExtensibilityGlobals) = postSolution |
||||
|
SolutionGuid = {9CC60D9C-D24A-4113-9CF0-40976568F193} |
||||
|
EndGlobalSection |
||||
|
EndGlobal |
@ -0,0 +1,16 @@ |
|||||
|
#SmartFactorySuite |
||||
|
##Base Service |
||||
|
|
||||
|
|
||||
|
##服务端口列表 |
||||
|
* WebApp 10000 |
||||
|
* AuthServer 10100 |
||||
|
* InternalGateway 10110 |
||||
|
* WebAppGateway 10120 |
||||
|
* BaseService 10130 |
||||
|
* MasterService 10200 |
||||
|
|
||||
|
|
||||
|
* Redis 6379 |
||||
|
* ElasticSearch 9200 |
||||
|
* SqlServer 13314 |
@ -0,0 +1 @@ |
|||||
|
**/wwwroot/libs/** linguist-vendored |
@ -0,0 +1,266 @@ |
|||||
|
## Ignore Visual Studio temporary files, build results, and |
||||
|
## files generated by popular Visual Studio add-ons. |
||||
|
|
||||
|
# User-specific files |
||||
|
*.suo |
||||
|
*.user |
||||
|
*.userosscache |
||||
|
*.sln.docstates |
||||
|
|
||||
|
# User-specific files (MonoDevelop/Xamarin Studio) |
||||
|
*.userprefs |
||||
|
|
||||
|
# Build results |
||||
|
[Dd]ebug/ |
||||
|
[Dd]ebugPublic/ |
||||
|
[Rr]elease/ |
||||
|
[Rr]eleases/ |
||||
|
x64/ |
||||
|
x86/ |
||||
|
bld/ |
||||
|
[Bb]in/ |
||||
|
[Oo]bj/ |
||||
|
[Ll]og/ |
||||
|
**/bin/ |
||||
|
**/obj/ |
||||
|
**/Logs/ |
||||
|
|
||||
|
|
||||
|
# Visual Studio 2015 cache/options directory |
||||
|
.vs/ |
||||
|
# Uncomment if you have tasks that create the project's static files in wwwroot |
||||
|
#wwwroot/ |
||||
|
|
||||
|
# MSTest test Results |
||||
|
[Tt]est[Rr]esult*/ |
||||
|
[Bb]uild[Ll]og.* |
||||
|
|
||||
|
# NUNIT |
||||
|
*.VisualState.xml |
||||
|
TestResult.xml |
||||
|
|
||||
|
# Build Results of an ATL Project |
||||
|
[Dd]ebugPS/ |
||||
|
[Rr]eleasePS/ |
||||
|
dlldata.c |
||||
|
|
||||
|
# DNX |
||||
|
project.lock.json |
||||
|
artifacts/ |
||||
|
|
||||
|
*_i.c |
||||
|
*_p.c |
||||
|
*_i.h |
||||
|
*.ilk |
||||
|
*.meta |
||||
|
*.obj |
||||
|
*.pch |
||||
|
*.pdb |
||||
|
*.pgc |
||||
|
*.pgd |
||||
|
*.rsp |
||||
|
*.sbr |
||||
|
*.tlb |
||||
|
*.tli |
||||
|
*.tlh |
||||
|
*.tmp |
||||
|
*.tmp_proj |
||||
|
*.log |
||||
|
*.vspscc |
||||
|
*.vssscc |
||||
|
.builds |
||||
|
*.pidb |
||||
|
*.svclog |
||||
|
*.scc |
||||
|
|
||||
|
# Chutzpah Test files |
||||
|
_Chutzpah* |
||||
|
|
||||
|
# Visual C++ cache files |
||||
|
ipch/ |
||||
|
*.aps |
||||
|
*.ncb |
||||
|
*.opendb |
||||
|
*.opensdf |
||||
|
*.sdf |
||||
|
*.cachefile |
||||
|
*.VC.db |
||||
|
*.VC.VC.opendb |
||||
|
|
||||
|
# Visual Studio profiler |
||||
|
*.psess |
||||
|
*.vsp |
||||
|
*.vspx |
||||
|
*.sap |
||||
|
|
||||
|
# TFS 2012 Local Workspace |
||||
|
$tf/ |
||||
|
|
||||
|
# Guidance Automation Toolkit |
||||
|
*.gpState |
||||
|
|
||||
|
# ReSharper is a .NET coding add-in |
||||
|
_ReSharper*/ |
||||
|
*.[Rr]e[Ss]harper |
||||
|
*.DotSettings.user |
||||
|
|
||||
|
# JustCode is a .NET coding add-in |
||||
|
.JustCode |
||||
|
|
||||
|
# TeamCity is a build add-in |
||||
|
_TeamCity* |
||||
|
|
||||
|
# DotCover is a Code Coverage Tool |
||||
|
*.dotCover |
||||
|
|
||||
|
# NCrunch |
||||
|
_NCrunch_* |
||||
|
.*crunch*.local.xml |
||||
|
nCrunchTemp_* |
||||
|
|
||||
|
# MightyMoose |
||||
|
*.mm.* |
||||
|
AutoTest.Net/ |
||||
|
|
||||
|
# Web workbench (sass) |
||||
|
.sass-cache/ |
||||
|
|
||||
|
# Installshield output folder |
||||
|
[Ee]xpress/ |
||||
|
|
||||
|
# DocProject is a documentation generator add-in |
||||
|
DocProject/buildhelp/ |
||||
|
DocProject/Help/*.HxT |
||||
|
DocProject/Help/*.HxC |
||||
|
DocProject/Help/*.hhc |
||||
|
DocProject/Help/*.hhk |
||||
|
DocProject/Help/*.hhp |
||||
|
DocProject/Help/Html2 |
||||
|
DocProject/Help/html |
||||
|
|
||||
|
# Click-Once directory |
||||
|
publish/ |
||||
|
|
||||
|
# Publish Web Output |
||||
|
*.[Pp]ublish.xml |
||||
|
*.azurePubxml |
||||
|
# TODO: Comment the next line if you want to checkin your web deploy settings |
||||
|
# but database connection strings (with potential passwords) will be unencrypted |
||||
|
*.pubxml |
||||
|
*.publishproj |
||||
|
|
||||
|
# Microsoft Azure Web App publish settings. Comment the next line if you want to |
||||
|
# checkin your Azure Web App publish settings, but sensitive information contained |
||||
|
# in these scripts will be unencrypted |
||||
|
PublishScripts/ |
||||
|
|
||||
|
# NuGet Packages |
||||
|
*.nupkg |
||||
|
# The packages folder can be ignored because of Package Restore |
||||
|
**/packages/* |
||||
|
# except build/, which is used as an MSBuild target. |
||||
|
!**/packages/build/ |
||||
|
# Uncomment if necessary however generally it will be regenerated when needed |
||||
|
#!**/packages/repositories.config |
||||
|
# NuGet v3's project.json files produces more ignoreable files |
||||
|
*.nuget.props |
||||
|
*.nuget.targets |
||||
|
|
||||
|
# Microsoft Azure Build Output |
||||
|
csx/ |
||||
|
*.build.csdef |
||||
|
|
||||
|
# Microsoft Azure Emulator |
||||
|
ecf/ |
||||
|
rcf/ |
||||
|
|
||||
|
# Windows Store app package directories and files |
||||
|
AppPackages/ |
||||
|
BundleArtifacts/ |
||||
|
Package.StoreAssociation.xml |
||||
|
_pkginfo.txt |
||||
|
|
||||
|
# Visual Studio cache files |
||||
|
# files ending in .cache can be ignored |
||||
|
*.[Cc]ache |
||||
|
# but keep track of directories ending in .cache |
||||
|
!*.[Cc]ache/ |
||||
|
|
||||
|
# Others |
||||
|
ClientBin/ |
||||
|
~$* |
||||
|
*~ |
||||
|
*.dbmdl |
||||
|
*.dbproj.schemaview |
||||
|
*.pfx |
||||
|
*.publishsettings |
||||
|
node_modules/ |
||||
|
orleans.codegen.cs |
||||
|
|
||||
|
# Since there are multiple workflows, uncomment next line to ignore bower_components |
||||
|
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) |
||||
|
#bower_components/ |
||||
|
|
||||
|
# RIA/Silverlight projects |
||||
|
Generated_Code/ |
||||
|
|
||||
|
# Backup & report files from converting an old project file |
||||
|
# to a newer Visual Studio version. Backup files are not needed, |
||||
|
# because we have git ;-) |
||||
|
_UpgradeReport_Files/ |
||||
|
Backup*/ |
||||
|
UpgradeLog*.XML |
||||
|
UpgradeLog*.htm |
||||
|
|
||||
|
# SQL Server files |
||||
|
*.mdf |
||||
|
*.ldf |
||||
|
|
||||
|
# Business Intelligence projects |
||||
|
*.rdl.data |
||||
|
*.bim.layout |
||||
|
*.bim_*.settings |
||||
|
|
||||
|
# Microsoft Fakes |
||||
|
FakesAssemblies/ |
||||
|
|
||||
|
# GhostDoc plugin setting file |
||||
|
*.GhostDoc.xml |
||||
|
|
||||
|
# Node.js Tools for Visual Studio |
||||
|
.ntvs_analysis.dat |
||||
|
|
||||
|
# Visual Studio 6 build log |
||||
|
*.plg |
||||
|
|
||||
|
# Visual Studio 6 workspace options file |
||||
|
*.opt |
||||
|
|
||||
|
# Visual Studio LightSwitch build output |
||||
|
**/*.HTMLClient/GeneratedArtifacts |
||||
|
**/*.DesktopClient/GeneratedArtifacts |
||||
|
**/*.DesktopClient/ModelManifest.xml |
||||
|
**/*.Server/GeneratedArtifacts |
||||
|
**/*.Server/ModelManifest.xml |
||||
|
_Pvt_Extensions |
||||
|
|
||||
|
# Paket dependency manager |
||||
|
.paket/paket.exe |
||||
|
paket-files/ |
||||
|
|
||||
|
# FAKE - F# Make |
||||
|
.fake/ |
||||
|
|
||||
|
# JetBrains Rider |
||||
|
.idea/ |
||||
|
*.sln.iml |
||||
|
|
||||
|
# NewJit |
||||
|
src/WY.NewJit.Web/Logs/* |
||||
|
src/WY.NewJit.Web.Host/Logs/* |
||||
|
src/WY.NewJit.IdentityServer/Logs/* |
||||
|
src/WY.NewJit.HttpApi.Host/Logs/* |
||||
|
src/WY.NewJit.HttpApi.HostWithIds/Logs/* |
||||
|
src/WY.NewJit.DbMigrator/Logs/* |
||||
|
src/WY.NewJit.Blazor.Server/Logs/* |
||||
|
src/WY.NewJit.Blazor.Server.Tiered/Logs/* |
@ -0,0 +1,5 @@ |
|||||
|
{ |
||||
|
"singleQuote": true, |
||||
|
"useTabs": false, |
||||
|
"tabWidth": 4 |
||||
|
} |
@ -0,0 +1,6 @@ |
|||||
|
<?xml version="1.0" encoding="utf-8"?> |
||||
|
<configuration> |
||||
|
<packageSources> |
||||
|
<add key="BlazoriseMyGet" value="https://www.myget.org/F/blazorise/api/v3/index.json" /> |
||||
|
</packageSources> |
||||
|
</configuration> |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,12 @@ |
|||||
|
%PDF-1.0 |
||||
|
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj 2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj 3 0 obj<</Type/Page/MediaBox[0 0 3 3]>>endobj |
||||
|
xref |
||||
|
0 4 |
||||
|
0000000000 65535 f |
||||
|
0000000010 00000 n |
||||
|
0000000053 00000 n |
||||
|
0000000102 00000 n |
||||
|
trailer<</Size 4/Root 1 0 R>> |
||||
|
startxref |
||||
|
149 |
||||
|
%EOF |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue