liuyunfeng
1 year ago
commit
8621f20ace
2881 changed files with 733620 additions and 0 deletions
@ -0,0 +1,86 @@ |
|||||
|
--- |
||||
|
kind: pipeline |
||||
|
type: docker |
||||
|
name: 长春派格FIS项目 |
||||
|
|
||||
|
platform: |
||||
|
arch: amd64 |
||||
|
os: linux |
||||
|
|
||||
|
steps: |
||||
|
- name: 分析 |
||||
|
image: aosapps/drone-sonar-plugin |
||||
|
settings: |
||||
|
sonar_host: http://dev.ccwin-in.com:3005 |
||||
|
sonar_token: sqa_a1da3cf5984f39d9a256493acbae857c6624e954 |
||||
|
|
||||
|
- name: 后端构建 |
||||
|
image: mcr.microsoft.com/dotnet/sdk:6.0 |
||||
|
privileged: true |
||||
|
commands: |
||||
|
- cd ./build |
||||
|
- chmod 755 ./be-build.sh |
||||
|
- ./be-build.sh |
||||
|
- 'git --no-pager log --date=format:"%Y-%m-%d %H:%M:%S" --pretty=format:"%h - %ad %cn: %s %b" --invert-grep --grep="CI SKIP" --grep="drone" >./publish/log.txt' |
||||
|
- echo "${DRONE_BUILD_NUMBER}-${DRONE_COMMIT_AUTHOR}-${DRONE_REPO_BRANCH}-${DRONE_COMMIT_SHA:0:8}\n">./publish/version.txt |
||||
|
- echo ${DRONE_COMMIT_MESSAGE}>>./publish/version.txt |
||||
|
|
||||
|
# - name: 前端构建 |
||||
|
# image: node:14.21.3 |
||||
|
# privileged: true |
||||
|
# commands: |
||||
|
# - cd ./build |
||||
|
# - chmod 755 ./fe-build.sh |
||||
|
# - ./fe-build.sh |
||||
|
|
||||
|
- name: 发布到MinIO |
||||
|
image: plugins/s3 |
||||
|
settings: |
||||
|
endpoint: http://dev.ccwin-in.com:3008 |
||||
|
path_style: true |
||||
|
bucket: default |
||||
|
access_key: O222sbIaMKeGfeX18t8K |
||||
|
secret_key: 0LEOWfXSDnaLbIYGZfdKUxyi2kYIayx4YvdLTgcR |
||||
|
source: build/publish/**/* |
||||
|
strip_prefix: build/publish/ |
||||
|
target: /fis/cc-pai-ge/${DRONE_BUILD_NUMBER}-${DRONE_COMMIT_AUTHOR}-${DRONE_REPO_BRANCH}-${DRONE_COMMIT_SHA:0:8} |
||||
|
|
||||
|
- name: 停止测试服务器服务 |
||||
|
image: appleboy/drone-ssh |
||||
|
settings: |
||||
|
host: dev.ccwin-in.com |
||||
|
port: 16085 |
||||
|
username: Administrator |
||||
|
password: Microsoft@2022 |
||||
|
command_timeout: 10m |
||||
|
script: |
||||
|
- mkdir -p /d/publish/fis/cc-pai-ge/web |
||||
|
- cd /d/publish/fis/cc-pai-ge/web |
||||
|
- ./stop.cmd |
||||
|
- sleep 3 |
||||
|
- cd ../.. |
||||
|
- rm -rf /d/publish/fis/cc-pai-ge |
||||
|
- mkdir -p /d/publish/fis/cc-pai-ge |
||||
|
|
||||
|
- name: 部署到测试服务器 |
||||
|
image: cschlosser/drone-ftps |
||||
|
environment: |
||||
|
PLUGIN_HOSTNAME: dev.ccwin-in.com:16022 |
||||
|
FTP_USERNAME: Administrator |
||||
|
FTP_PASSWORD: Microsoft@2022 |
||||
|
PLUGIN_SRC_DIR: /build/publish |
||||
|
PLUGIN_DEST_DIR: /fis/cc-pai-ge |
||||
|
PLUGIN_SECURE: false |
||||
|
PLUGIN_CHMOD: false |
||||
|
|
||||
|
- name: 启动测试服务器服务 |
||||
|
image: appleboy/drone-ssh |
||||
|
settings: |
||||
|
host: dev.ccwin-in.com |
||||
|
port: 16085 |
||||
|
username: Administrator |
||||
|
password: Microsoft@2022 |
||||
|
command_timeout: 10m |
||||
|
script: |
||||
|
- cd /d/publish/fis/cc-pai-ge/web |
||||
|
- ./start.cmd |
@ -0,0 +1,3 @@ |
|||||
|
* text=auto eol=lf |
||||
|
*.{cmd,[cC][mM][dD]} text eol=crlf |
||||
|
*.{bat,[bB][aA][tT]} text eol=crlf |
@ -0,0 +1,32 @@ |
|||||
|
################################################################################ |
||||
|
# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。 |
||||
|
################################################################################ |
||||
|
|
||||
|
/src/Shared/Win.Abp.Snowflakes/bin/Debug/netcoreapp5/Win.Abp.Snowflakes.deps.json |
||||
|
/src/Shared |
||||
|
/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/Logs/log-20210906.txt |
||||
|
/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/Logs |
||||
|
/.vs |
||||
|
/src/.vs |
||||
|
/src/Modules/SettleAccount/host/SettleAccount.HttpApi.Host/Logs |
||||
|
/src/Modules/派格FIS/src/WY.NewJit.Application/obj |
||||
|
/src/Modules/派格FIS/src/WY.NewJit.Application.Contracts/obj |
||||
|
/src/Modules/派格FIS/src/WY.NewJit.DbMigrator/obj |
||||
|
/src/Modules/派格FIS |
||||
|
/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Web/JIS_BAK |
||||
|
/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Web/JIS_WORK |
||||
|
/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Web/JIS_RECEIVE |
||||
|
/src/Modules/新版JIT或JIS系统服务端/OutPut |
||||
|
|
||||
|
/src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Application.Contracts/WY.NewJit.Application.xml |
||||
|
/src/Modules/新版JIT或JIS系统服务端/OutPut |
||||
|
OutPut |
||||
|
|
||||
|
/src/Modules/新版JIT或JIS系统服务端/OutPut/net5.0/WY.NewJit.Application.Contracts.dll |
||||
|
/src/Modules/新版JIT或JIS系统服务端/OutPut/net5.0/WY.NewJit.Application.dll |
||||
|
/src/Modules/新版JIT或JIS系统服务端/OutPut/net5.0/WY.NewJit.Domain.Shared.dll |
||||
|
/src/Modules/新版JIT或JIS系统服务端/OutPut/net5.0/WY.NewJit.Domain.dll |
||||
|
/src/Modules/新版JIT或JIS系统服务端/OutPut/net5.0/WY.NewJit.EntityFrameworkCore.dll |
||||
|
/src/Modules/新版JIT或JIS系统服务端/OutPut/netstandard2.0/WY.NewJit.Application.Contracts.dll |
||||
|
/src/Modules/新版JIT或JIS系统服务端/OutPut/netstandard2.0/WY.NewJit.Domain.Shared.dll |
||||
|
debug.log |
@ -0,0 +1,38 @@ |
|||||
|
# 长春派格FIS项目 |
||||
|
|
||||
|
## 提交规范 |
||||
|
|
||||
|
默认进行自动构建、发布到MinIO并自动部署到测试服务器 |
||||
|
|
||||
|
1. 提交前确保先拉取更新 |
||||
|
1. 提交时确保编译通过,提交后检查CI服务器编译是否成功 |
||||
|
1. 不需要自动构建和部署的,在提交信息中添加 `[CI SKIP]` |
||||
|
1. 针对特定问题的解决,提交信息中添加问题编号 |
||||
|
|
||||
|
## 开发环境配置 |
||||
|
|
||||
|
### 配置文件 |
||||
|
|
||||
|
在项目 SettleAccount.HttpApi.Host 下添加开发配置文件 appsettings.development.json |
||||
|
|
||||
|
```json |
||||
|
|
||||
|
``` |
||||
|
|
||||
|
### 数据库 |
||||
|
|
||||
|
本地安装 SQL Server 2016 + ,在程序包管理器控制台中切换项目并设置为启动项目后执行 EF Core 数据迁移命令 |
||||
|
|
||||
|
```sh |
||||
|
#WY.NewJit.EntityFrameworkCore.DbMigrations |
||||
|
update-database -context NewJitMigrationsDbContext -connection "Server=.;Database=NewJit;uid=sa;pwd=aA123456!" |
||||
|
``` |
||||
|
|
||||
|
### 启动调试 |
||||
|
|
||||
|
入口项目:WY.NewJit.Web |
||||
|
|
||||
|
## 部署 |
||||
|
|
||||
|
1. 部署到测试服务器时正常提交,appsettings.json 中默认为测试服务器配置,本地使用 appsettings.development.json 进行配置 |
||||
|
1. 部署到生产正常提交,生产环境使用 appsettings.production.json 进行配置 |
@ -0,0 +1 @@ |
|||||
|
publish |
@ -0,0 +1,8 @@ |
|||||
|
rm -rf ./publish |
||||
|
dotnet publish -v normal -c Release -r win-x64 ../src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Web -o ./publish/web |
||||
|
dotnet publish -v normal -c Release -r win-x64 ../src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Job.ConsoleApp -o ./publish/console/ConsoleApp |
||||
|
dotnet publish -v normal -c Release -r win-x64 ../src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Job.ConsoleBatchImportBrokenNum -o ./publish/console/ConsoleBatchImportBrokenNum |
||||
|
dotnet publish -v normal -c Release -r win-x64 ../src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Job.BomInterface/WY.NewJit.Job.ConsoleBomInterface.csproj -o ./publish/console/ConsoleBomInterface |
||||
|
dotnet publish -v normal -c Release -r win-x64 ../src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Job.ConsoleGetEDIFile -o ./publish/console/ConsoleGetEDIFile |
||||
|
dotnet publish -v normal -c Release -r win-x64 ../src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Job.ConsoleSyncToWms -o ./publish/console/ConsoleMesSync |
||||
|
dotnet publish -v normal -c Release -r win-x64 ../src/Modules/新版JIT或JIS系统服务端/src/WY.NewJit.Job.ConsoleMoveFile -o ./publish/console/ConsoleMoveFile |
@ -0,0 +1 @@ |
|||||
|
cd ../vue&&npm config set registry https://registry.npm.taobao.org&&npm install --registry=https://registry.npm.taobao.org&&npm run build:prod&&mv ./dist/** ../build/publish/web/wwwroot/ |
@ -0,0 +1,361 @@ |
|||||
|
## 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 |
||||
|
/AuthServer.Host/wwwroot/libs |
@ -0,0 +1,32 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk.Web"> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<TargetFramework>net5.0</TargetFramework> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<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.Extensions.Hosting" Version="3.1.0" /> |
||||
|
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" /> |
||||
|
<PackageReference Include="Volo.Abp.Account.Application" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.AuditLogging.EntityFrameworkCore" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.Autofac" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.IdentityServer.EntityFrameworkCore" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.TenantManagement.EntityFrameworkCore" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.Identity.EntityFrameworkCore" Version="4.0.0" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ProjectExtensions><VisualStudio><UserProperties appsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions> |
||||
|
|
||||
|
</Project> |
@ -0,0 +1,25 @@ |
|||||
|
|
||||
|
Microsoft Visual Studio Solution File, Format Version 12.00 |
||||
|
# Visual Studio Version 16 |
||||
|
VisualStudioVersion = 16.0.29326.143 |
||||
|
MinimumVisualStudioVersion = 10.0.40219.1 |
||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AuthServer.Host", "AuthServer.Host.csproj", "{21789B5F-E84A-407E-8DAA-5F268E5F8647}" |
||||
|
EndProject |
||||
|
Global |
||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
||||
|
Debug|Any CPU = Debug|Any CPU |
||||
|
Release|Any CPU = Release|Any CPU |
||||
|
EndGlobalSection |
||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
||||
|
{21789B5F-E84A-407E-8DAA-5F268E5F8647}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
||||
|
{21789B5F-E84A-407E-8DAA-5F268E5F8647}.Debug|Any CPU.Build.0 = Debug|Any CPU |
||||
|
{21789B5F-E84A-407E-8DAA-5F268E5F8647}.Release|Any CPU.ActiveCfg = Release|Any CPU |
||||
|
{21789B5F-E84A-407E-8DAA-5F268E5F8647}.Release|Any CPU.Build.0 = Release|Any CPU |
||||
|
EndGlobalSection |
||||
|
GlobalSection(SolutionProperties) = preSolution |
||||
|
HideSolutionNode = FALSE |
||||
|
EndGlobalSection |
||||
|
GlobalSection(ExtensibilityGlobals) = postSolution |
||||
|
SolutionGuid = {7585D0E2-0A6D-4F73-8EFF-433646754357} |
||||
|
EndGlobalSection |
||||
|
EndGlobal |
@ -0,0 +1,255 @@ |
|||||
|
using IdentityServer4.Models; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.Authorization.Permissions; |
||||
|
using Volo.Abp.Data; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
using Volo.Abp.Guids; |
||||
|
using Volo.Abp.Identity; |
||||
|
using Volo.Abp.IdentityServer.ApiResources; |
||||
|
using Volo.Abp.IdentityServer.ApiScopes; |
||||
|
using Volo.Abp.IdentityServer.Clients; |
||||
|
using Volo.Abp.IdentityServer.IdentityResources; |
||||
|
using Volo.Abp.PermissionManagement; |
||||
|
using Volo.Abp.Uow; |
||||
|
using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource; |
||||
|
using ApiScope = Volo.Abp.IdentityServer.ApiScopes.ApiScope; |
||||
|
using Client = Volo.Abp.IdentityServer.Clients.Client; |
||||
|
|
||||
|
namespace AuthServer.Host |
||||
|
{ |
||||
|
public class AuthServerDataSeeder : IDataSeedContributor, ITransientDependency |
||||
|
{ |
||||
|
private readonly IApiResourceRepository _apiResourceRepository; |
||||
|
private readonly IApiScopeRepository _apiScopeRepository; |
||||
|
private readonly IClientRepository _clientRepository; |
||||
|
private readonly IIdentityResourceDataSeeder _identityResourceDataSeeder; |
||||
|
private readonly IGuidGenerator _guidGenerator; |
||||
|
private readonly IPermissionDataSeeder _permissionDataSeeder; |
||||
|
|
||||
|
public AuthServerDataSeeder( |
||||
|
IClientRepository clientRepository, |
||||
|
IApiResourceRepository apiResourceRepository, |
||||
|
IApiScopeRepository apiScopeRepository, |
||||
|
IIdentityResourceDataSeeder identityResourceDataSeeder, |
||||
|
IGuidGenerator guidGenerator, |
||||
|
IPermissionDataSeeder permissionDataSeeder) |
||||
|
{ |
||||
|
_clientRepository = clientRepository; |
||||
|
_apiResourceRepository = apiResourceRepository; |
||||
|
_apiScopeRepository = apiScopeRepository; |
||||
|
_identityResourceDataSeeder = identityResourceDataSeeder; |
||||
|
_guidGenerator = guidGenerator; |
||||
|
_permissionDataSeeder = permissionDataSeeder; |
||||
|
} |
||||
|
|
||||
|
[UnitOfWork] |
||||
|
public virtual async Task SeedAsync(DataSeedContext context) |
||||
|
{ |
||||
|
await _identityResourceDataSeeder.CreateStandardResourcesAsync(); |
||||
|
await CreateApiResourcesAsync(); |
||||
|
await CreateApiScopesAsync(); |
||||
|
await CreateClientsAsync(); |
||||
|
} |
||||
|
|
||||
|
private async Task CreateApiScopesAsync() |
||||
|
{ |
||||
|
await CreateApiScopeAsync("BaseService"); |
||||
|
await CreateApiScopeAsync("InternalGateway"); |
||||
|
await CreateApiScopeAsync("WebAppGateway"); |
||||
|
await CreateApiScopeAsync("TenantService"); |
||||
|
await CreateApiScopeAsync("BusinessService"); |
||||
|
await CreateApiScopeAsync("FileStorageService"); |
||||
|
await CreateApiScopeAsync("IdentityService"); |
||||
|
await CreateApiScopeAsync("SettleAccount"); |
||||
|
} |
||||
|
|
||||
|
private async Task CreateApiResourcesAsync() |
||||
|
{ |
||||
|
var commonApiUserClaims = new[] |
||||
|
{ |
||||
|
"email", |
||||
|
"email_verified", |
||||
|
"name", |
||||
|
"user_name", |
||||
|
"phone_number", |
||||
|
"phone_number_verified", |
||||
|
"role" |
||||
|
}; |
||||
|
await CreateApiResourceAsync("IdentityService", commonApiUserClaims); |
||||
|
await CreateApiResourceAsync("BaseService", commonApiUserClaims); |
||||
|
await CreateApiResourceAsync("InternalGateway", commonApiUserClaims); |
||||
|
await CreateApiResourceAsync("WebAppGateway", commonApiUserClaims); |
||||
|
await CreateApiResourceAsync("TenantService", commonApiUserClaims); |
||||
|
await CreateApiResourceAsync("BusinessService", commonApiUserClaims); |
||||
|
await CreateApiResourceAsync("FileStorageService", commonApiUserClaims); |
||||
|
await CreateApiResourceAsync("SettleAccount", commonApiUserClaims); |
||||
|
} |
||||
|
|
||||
|
private async Task<ApiResource> CreateApiResourceAsync(string name, IEnumerable<string> claims) |
||||
|
{ |
||||
|
var apiResource = await _apiResourceRepository.FindByNameAsync(name); |
||||
|
if (apiResource == null) |
||||
|
{ |
||||
|
apiResource = await _apiResourceRepository.InsertAsync( |
||||
|
new ApiResource( |
||||
|
_guidGenerator.Create(), |
||||
|
name, |
||||
|
name + " API" |
||||
|
), |
||||
|
autoSave: true |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
foreach (var claim in claims) |
||||
|
{ |
||||
|
if (apiResource.FindClaim(claim) == null) |
||||
|
{ |
||||
|
apiResource.AddUserClaim(claim); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return await _apiResourceRepository.UpdateAsync(apiResource); |
||||
|
} |
||||
|
|
||||
|
private async Task<ApiScope> CreateApiScopeAsync(string name) |
||||
|
{ |
||||
|
var apiScope = await _apiScopeRepository.GetByNameAsync(name); |
||||
|
if (apiScope == null) |
||||
|
{ |
||||
|
apiScope = await _apiScopeRepository.InsertAsync( |
||||
|
new ApiScope( |
||||
|
_guidGenerator.Create(), |
||||
|
name, |
||||
|
name + " API" |
||||
|
), |
||||
|
autoSave: true |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
return apiScope; |
||||
|
} |
||||
|
|
||||
|
private async Task CreateClientsAsync() |
||||
|
{ |
||||
|
var commonScopes = new[] |
||||
|
{ |
||||
|
"email", |
||||
|
"username", |
||||
|
"name", |
||||
|
"openid", |
||||
|
"profile", |
||||
|
"role", |
||||
|
"phone", |
||||
|
"address" |
||||
|
}; |
||||
|
|
||||
|
await CreateClientAsync( |
||||
|
"basic-web", |
||||
|
new[] { "IdentityService", "BaseService", "WebAppGateway", "FileStorageService", "TenantService", "BusinessService", "SettleAccount" }, |
||||
|
new[] { "password" }, |
||||
|
"1q2w3e*".Sha256() |
||||
|
); |
||||
|
|
||||
|
//BaseDataService
|
||||
|
await CreateClientAsync( |
||||
|
"business-app", |
||||
|
new[] { "InternalGateway", "IdentityService", "BaseService", "FileStorageService", "SettleAccount" }, |
||||
|
new[] { "client_credentials" }, |
||||
|
"1q2w3e*".Sha256(), |
||||
|
permissions: new[] { IdentityPermissions.Users.Default } |
||||
|
); |
||||
|
//FileStorge
|
||||
|
await CreateClientAsync( |
||||
|
"file-app", |
||||
|
new[] { "InternalGateway", "IdentityService", "BaseService", "BaseDataService", "BusinessService" }, |
||||
|
new[] { "client_credentials" }, |
||||
|
"1q2w3e*".Sha256(), |
||||
|
permissions: new[] { IdentityPermissions.Users.Default } |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
private async Task<Client> CreateClientAsync( |
||||
|
string name, |
||||
|
IEnumerable<string> scopes, |
||||
|
IEnumerable<string> grantTypes, |
||||
|
string secret, |
||||
|
string redirectUri = null, |
||||
|
string postLogoutRedirectUri = null, |
||||
|
IEnumerable<string> permissions = null) |
||||
|
{ |
||||
|
var client = await _clientRepository.FindByClientIdAsync(name); |
||||
|
if (client == null) |
||||
|
{ |
||||
|
client = await _clientRepository.InsertAsync( |
||||
|
new Client( |
||||
|
_guidGenerator.Create(), |
||||
|
name |
||||
|
) |
||||
|
{ |
||||
|
ClientName = name, |
||||
|
ProtocolType = "oidc", |
||||
|
Description = name, |
||||
|
AlwaysIncludeUserClaimsInIdToken = true, |
||||
|
AllowOfflineAccess = true, |
||||
|
AbsoluteRefreshTokenLifetime = 31536000, //365 days
|
||||
|
AccessTokenLifetime = 31536000, //365 days
|
||||
|
AuthorizationCodeLifetime = 300, |
||||
|
IdentityTokenLifetime = 300, |
||||
|
RequireConsent = false |
||||
|
}, |
||||
|
autoSave: true |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
foreach (var scope in scopes) |
||||
|
{ |
||||
|
if (client.FindScope(scope) == null) |
||||
|
{ |
||||
|
client.AddScope(scope); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
foreach (var grantType in grantTypes) |
||||
|
{ |
||||
|
if (client.FindGrantType(grantType) == null) |
||||
|
{ |
||||
|
client.AddGrantType(grantType); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (client.FindSecret(secret) == null) |
||||
|
{ |
||||
|
client.AddSecret(secret); |
||||
|
} |
||||
|
|
||||
|
if (redirectUri != null) |
||||
|
{ |
||||
|
if (client.FindRedirectUri(redirectUri) == null) |
||||
|
{ |
||||
|
client.AddRedirectUri(redirectUri); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (postLogoutRedirectUri != null) |
||||
|
{ |
||||
|
if (client.FindPostLogoutRedirectUri(postLogoutRedirectUri) == null) |
||||
|
{ |
||||
|
client.AddPostLogoutRedirectUri(postLogoutRedirectUri); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
if (permissions != null) |
||||
|
{ |
||||
|
await _permissionDataSeeder.SeedAsync( |
||||
|
ClientPermissionValueProvider.ProviderName, |
||||
|
name, |
||||
|
permissions |
||||
|
); |
||||
|
} |
||||
|
|
||||
|
return await _clientRepository.UpdateAsync(client); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,125 @@ |
|||||
|
using AuthServer.Host.EntityFrameworkCore; |
||||
|
using Microsoft.AspNetCore.Builder; |
||||
|
using Microsoft.AspNetCore.Cors; |
||||
|
using Microsoft.AspNetCore.DataProtection; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using StackExchange.Redis; |
||||
|
using System; |
||||
|
using System.Linq; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.Account; |
||||
|
using Volo.Abp.Account.Web; |
||||
|
using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; |
||||
|
using Volo.Abp.Auditing; |
||||
|
using Volo.Abp.AuditLogging.EntityFrameworkCore; |
||||
|
using Volo.Abp.Autofac; |
||||
|
using Volo.Abp.Data; |
||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Volo.Abp.EntityFrameworkCore.SqlServer; |
||||
|
using Volo.Abp.Identity.EntityFrameworkCore; |
||||
|
using Volo.Abp.IdentityServer.EntityFrameworkCore; |
||||
|
using Volo.Abp.Localization; |
||||
|
using Volo.Abp.Modularity; |
||||
|
using Volo.Abp.PermissionManagement.EntityFrameworkCore; |
||||
|
using Volo.Abp.SettingManagement.EntityFrameworkCore; |
||||
|
using Volo.Abp.TenantManagement.EntityFrameworkCore; |
||||
|
using Volo.Abp.Threading; |
||||
|
|
||||
|
namespace AuthServer.Host |
||||
|
{ |
||||
|
[DependsOn( |
||||
|
typeof(AbpAutofacModule), |
||||
|
typeof(AbpPermissionManagementEntityFrameworkCoreModule), |
||||
|
typeof(AbpAuditLoggingEntityFrameworkCoreModule), |
||||
|
typeof(AbpSettingManagementEntityFrameworkCoreModule), |
||||
|
typeof(AbpIdentityEntityFrameworkCoreModule), |
||||
|
typeof(AbpIdentityServerEntityFrameworkCoreModule), |
||||
|
typeof(AbpTenantManagementEntityFrameworkCoreModule), |
||||
|
typeof(AbpEntityFrameworkCoreSqlServerModule), |
||||
|
typeof(AbpAccountWebIdentityServerModule), |
||||
|
typeof(AbpAccountApplicationModule), |
||||
|
typeof(AbpAspNetCoreMvcUiBasicThemeModule) |
||||
|
)] |
||||
|
public class AuthServerHostModule : AbpModule |
||||
|
{ |
||||
|
private const string DefaultCorsPolicyName = "Default"; |
||||
|
|
||||
|
public override void ConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
var configuration = context.Services.GetConfiguration(); |
||||
|
|
||||
|
context.Services.AddAbpDbContext<AuthServerDbContext>(options => |
||||
|
{ |
||||
|
options.AddDefaultRepositories(); |
||||
|
}); |
||||
|
|
||||
|
Configure<AbpDbContextOptions>(options => |
||||
|
{ |
||||
|
options.UseSqlServer(); |
||||
|
}); |
||||
|
|
||||
|
Configure<AbpLocalizationOptions>(options => |
||||
|
{ |
||||
|
options.Languages.Add(new LanguageInfo("en", "en", "English")); |
||||
|
}); |
||||
|
|
||||
|
context.Services.AddStackExchangeRedisCache(options => |
||||
|
{ |
||||
|
options.Configuration = configuration["Redis:Configuration"]; |
||||
|
}); |
||||
|
|
||||
|
context.Services.AddCors(options => |
||||
|
{ |
||||
|
options.AddPolicy(DefaultCorsPolicyName, |
||||
|
builder => |
||||
|
{ |
||||
|
builder.WithOrigins(configuration["CorsOrigins"] |
||||
|
.Split(",", StringSplitOptions.RemoveEmptyEntries) |
||||
|
.Select(o => o.RemovePostFix("/")) |
||||
|
.ToArray()) |
||||
|
.WithAbpExposedHeaders() |
||||
|
.SetIsOriginAllowedToAllowWildcardSubdomains() |
||||
|
.AllowAnyHeader() |
||||
|
.AllowAnyMethod() |
||||
|
.AllowCredentials(); |
||||
|
}); |
||||
|
}); |
||||
|
|
||||
|
Configure<AbpAuditingOptions>(options => |
||||
|
{ |
||||
|
options.IsEnabledForGetRequests = true; |
||||
|
options.ApplicationName = "AuthServer"; |
||||
|
}); |
||||
|
|
||||
|
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); |
||||
|
context.Services.AddDataProtection() |
||||
|
.PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys"); |
||||
|
} |
||||
|
|
||||
|
public override void OnApplicationInitialization(ApplicationInitializationContext context) |
||||
|
{ |
||||
|
var app = context.GetApplicationBuilder(); |
||||
|
|
||||
|
app.UseCorrelationId(); |
||||
|
app.UseVirtualFiles(); |
||||
|
app.UseRouting(); |
||||
|
app.UseCors(DefaultCorsPolicyName); |
||||
|
app.UseAuthentication(); |
||||
|
app.UseMultiTenancy(); |
||||
|
app.UseIdentityServer(); |
||||
|
app.UseAuthorization(); |
||||
|
app.UseAbpRequestLocalization(); |
||||
|
app.UseAuditing(); |
||||
|
|
||||
|
AsyncHelper.RunSync(async () => |
||||
|
{ |
||||
|
using (var scope = context.ServiceProvider.CreateScope()) |
||||
|
{ |
||||
|
await scope.ServiceProvider |
||||
|
.GetRequiredService<IDataSeeder>() |
||||
|
.SeedAsync(); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,12 @@ |
|||||
|
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build |
||||
|
WORKDIR /app |
||||
|
|
||||
|
WORKDIR /src |
||||
|
COPY . . |
||||
|
RUN dotnet restore |
||||
|
RUN dotnet publish -c Release -o publish |
||||
|
|
||||
|
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 |
||||
|
WORKDIR /app |
||||
|
COPY --from=build /src/publish ./ |
||||
|
ENTRYPOINT ["dotnet", "AuthServer.Host.dll"] |
@ -0,0 +1,22 @@ |
|||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Volo.Abp.IdentityServer.EntityFrameworkCore; |
||||
|
|
||||
|
namespace AuthServer.Host.EntityFrameworkCore |
||||
|
{ |
||||
|
public class AuthServerDbContext : AbpDbContext<AuthServerDbContext> |
||||
|
{ |
||||
|
public AuthServerDbContext(DbContextOptions<AuthServerDbContext> options) |
||||
|
: base(options) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
protected override void OnModelCreating(ModelBuilder modelBuilder) |
||||
|
{ |
||||
|
base.OnModelCreating(modelBuilder); |
||||
|
|
||||
|
modelBuilder.ConfigureIdentityServer(); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,29 @@ |
|||||
|
using System.IO; |
||||
|
using Microsoft.EntityFrameworkCore; |
||||
|
using Microsoft.EntityFrameworkCore.Design; |
||||
|
using Microsoft.Extensions.Configuration; |
||||
|
|
||||
|
namespace AuthServer.Host.EntityFrameworkCore |
||||
|
{ |
||||
|
public class AuthServerDbContextFactory : IDesignTimeDbContextFactory<AuthServerDbContext> |
||||
|
{ |
||||
|
public AuthServerDbContext CreateDbContext(string[] args) |
||||
|
{ |
||||
|
var configuration = BuildConfiguration(); |
||||
|
|
||||
|
var builder = new DbContextOptionsBuilder<AuthServerDbContext>() |
||||
|
.UseSqlServer(configuration.GetConnectionString("Default")); |
||||
|
|
||||
|
return new AuthServerDbContext(builder.Options); |
||||
|
} |
||||
|
|
||||
|
private static IConfigurationRoot BuildConfiguration() |
||||
|
{ |
||||
|
var builder = new ConfigurationBuilder() |
||||
|
.SetBasePath(Directory.GetCurrentDirectory()) |
||||
|
.AddJsonFile("appsettings.json", optional: false); |
||||
|
|
||||
|
return builder.Build(); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,846 @@ |
|||||
|
// <auto-generated />
|
||||
|
using System; |
||||
|
using AuthServer.Host.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 AuthServer.Host.Migrations |
||||
|
{ |
||||
|
[DbContext(typeof(AuthServerDbContext))] |
||||
|
[Migration("20200829070857_init")] |
||||
|
partial class init |
||||
|
{ |
||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder) |
||||
|
{ |
||||
|
#pragma warning disable 612, 618
|
||||
|
modelBuilder |
||||
|
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) |
||||
|
.HasAnnotation("ProductVersion", "3.1.6") |
||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128) |
||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<Guid?>("DeleterId") |
||||
|
.HasColumnName("DeleterId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<DateTime?>("DeletionTime") |
||||
|
.HasColumnName("DeletionTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(1000)") |
||||
|
.HasMaxLength(1000); |
||||
|
|
||||
|
b.Property<string>("DisplayName") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<bool>("Enabled") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("IsDeleted") |
||||
|
.HasColumnType("bit") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnName("LastModificationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnName("LastModifierId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Properties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiResources"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ApiResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("ApiResourceId", "Type"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ApiResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(1000)") |
||||
|
.HasMaxLength(1000); |
||||
|
|
||||
|
b.Property<string>("DisplayName") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<bool>("Emphasize") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("Required") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("ShowInDiscoveryDocument") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.HasKey("ApiResourceId", "Name"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiScopes"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ApiResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("ApiResourceId", "Name", "Type"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiScopeClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ApiResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.Property<string>("Value") |
||||
|
.HasColumnType("nvarchar(4000)") |
||||
|
.HasMaxLength(4000); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<DateTime?>("Expiration") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.HasKey("ApiResourceId", "Type", "Value"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiSecrets"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<int>("AbsoluteRefreshTokenLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<int>("AccessTokenLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<int>("AccessTokenType") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("AllowAccessTokensViaBrowser") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AllowOfflineAccess") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AllowPlainTextPkce") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AllowRememberConsent") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AlwaysIncludeUserClaimsInIdToken") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AlwaysSendClientClaims") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<int>("AuthorizationCodeLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("BackChannelLogoutSessionRequired") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("BackChannelLogoutUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<string>("ClientClaimsPrefix") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ClientId") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ClientName") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ClientUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<int?>("ConsentLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<Guid?>("DeleterId") |
||||
|
.HasColumnName("DeleterId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<DateTime?>("DeletionTime") |
||||
|
.HasColumnName("DeletionTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(1000)") |
||||
|
.HasMaxLength(1000); |
||||
|
|
||||
|
b.Property<int>("DeviceCodeLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("EnableLocalLogin") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("Enabled") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<bool>("FrontChannelLogoutSessionRequired") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("FrontChannelLogoutUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<int>("IdentityTokenLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("IncludeJwtId") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("IsDeleted") |
||||
|
.HasColumnType("bit") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnName("LastModificationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnName("LastModifierId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("LogoUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<string>("PairWiseSubjectSalt") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ProtocolType") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<int>("RefreshTokenExpiration") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<int>("RefreshTokenUsage") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("RequireClientSecret") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("RequireConsent") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("RequirePkce") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<int>("SlidingRefreshTokenLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("UpdateAccessTokenClaimsOnRefresh") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("UserCodeType") |
||||
|
.HasColumnType("nvarchar(100)") |
||||
|
.HasMaxLength(100); |
||||
|
|
||||
|
b.Property<int?>("UserSsoLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("ClientId"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClients"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.Property<string>("Value") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.HasKey("ClientId", "Type", "Value"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Origin") |
||||
|
.HasColumnType("nvarchar(150)") |
||||
|
.HasMaxLength(150); |
||||
|
|
||||
|
b.HasKey("ClientId", "Origin"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientCorsOrigins"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("GrantType") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.HasKey("ClientId", "GrantType"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientGrantTypes"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Provider") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("ClientId", "Provider"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientIdPRestrictions"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("PostLogoutRedirectUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.HasKey("ClientId", "PostLogoutRedirectUri"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientPostLogoutRedirectUris"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Key") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.Property<string>("Value") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.HasKey("ClientId", "Key"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientProperties"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("RedirectUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.HasKey("ClientId", "RedirectUri"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientRedirectUris"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Scope") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("ClientId", "Scope"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientScopes"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.Property<string>("Value") |
||||
|
.HasColumnType("nvarchar(4000)") |
||||
|
.HasMaxLength(4000); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<DateTime?>("Expiration") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.HasKey("ClientId", "Type", "Value"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientSecrets"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("ClientId") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Data") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(max)") |
||||
|
.HasMaxLength(50000); |
||||
|
|
||||
|
b.Property<string>("DeviceCode") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<DateTime?>("Expiration") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<string>("SubjectId") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("UserCode") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("DeviceCode") |
||||
|
.IsUnique(); |
||||
|
|
||||
|
b.HasIndex("Expiration"); |
||||
|
|
||||
|
b.HasIndex("UserCode") |
||||
|
.IsUnique(); |
||||
|
|
||||
|
b.ToTable("IdentityServerDeviceFlowCodes"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => |
||||
|
{ |
||||
|
b.Property<string>("Key") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ClientId") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("Data") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(max)") |
||||
|
.HasMaxLength(50000); |
||||
|
|
||||
|
b.Property<DateTime?>("Expiration") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<Guid>("Id") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("SubjectId") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(50)") |
||||
|
.HasMaxLength(50); |
||||
|
|
||||
|
b.HasKey("Key"); |
||||
|
|
||||
|
b.HasIndex("Expiration"); |
||||
|
|
||||
|
b.HasIndex("SubjectId", "ClientId", "Type"); |
||||
|
|
||||
|
b.ToTable("IdentityServerPersistedGrants"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("IdentityResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("IdentityResourceId", "Type"); |
||||
|
|
||||
|
b.ToTable("IdentityServerIdentityClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<Guid?>("DeleterId") |
||||
|
.HasColumnName("DeleterId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<DateTime?>("DeletionTime") |
||||
|
.HasColumnName("DeletionTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(1000)") |
||||
|
.HasMaxLength(1000); |
||||
|
|
||||
|
b.Property<string>("DisplayName") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<bool>("Emphasize") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("Enabled") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("IsDeleted") |
||||
|
.HasColumnType("bit") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnName("LastModificationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnName("LastModifierId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Properties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<bool>("Required") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("ShowInDiscoveryDocument") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.ToTable("IdentityServerIdentityResources"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) |
||||
|
.WithMany("UserClaims") |
||||
|
.HasForeignKey("ApiResourceId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) |
||||
|
.WithMany("Scopes") |
||||
|
.HasForeignKey("ApiResourceId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiScope", null) |
||||
|
.WithMany("UserClaims") |
||||
|
.HasForeignKey("ApiResourceId", "Name") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) |
||||
|
.WithMany("Secrets") |
||||
|
.HasForeignKey("ApiResourceId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("Claims") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("AllowedCorsOrigins") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("AllowedGrantTypes") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("IdentityProviderRestrictions") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("PostLogoutRedirectUris") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("Properties") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("RedirectUris") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("AllowedScopes") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("ClientSecrets") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", null) |
||||
|
.WithMany("UserClaims") |
||||
|
.HasForeignKey("IdentityResourceId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
#pragma warning restore 612, 618
|
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,520 @@ |
|||||
|
using System; |
||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
|
||||
|
namespace AuthServer.Host.Migrations |
||||
|
{ |
||||
|
public partial class init : Migration |
||||
|
{ |
||||
|
protected override void Up(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerApiResources", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(nullable: false), |
||||
|
ExtraProperties = table.Column<string>(nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(maxLength: 40, nullable: true), |
||||
|
CreationTime = table.Column<DateTime>(nullable: false), |
||||
|
CreatorId = table.Column<Guid>(nullable: true), |
||||
|
LastModificationTime = table.Column<DateTime>(nullable: true), |
||||
|
LastModifierId = table.Column<Guid>(nullable: true), |
||||
|
IsDeleted = table.Column<bool>(nullable: false, defaultValue: false), |
||||
|
DeleterId = table.Column<Guid>(nullable: true), |
||||
|
DeletionTime = table.Column<DateTime>(nullable: true), |
||||
|
Name = table.Column<string>(maxLength: 200, nullable: false), |
||||
|
DisplayName = table.Column<string>(maxLength: 200, nullable: true), |
||||
|
Description = table.Column<string>(maxLength: 1000, nullable: true), |
||||
|
Enabled = table.Column<bool>(nullable: false), |
||||
|
Properties = table.Column<string>(nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerApiResources", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerClients", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(nullable: false), |
||||
|
ExtraProperties = table.Column<string>(nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(maxLength: 40, nullable: true), |
||||
|
CreationTime = table.Column<DateTime>(nullable: false), |
||||
|
CreatorId = table.Column<Guid>(nullable: true), |
||||
|
LastModificationTime = table.Column<DateTime>(nullable: true), |
||||
|
LastModifierId = table.Column<Guid>(nullable: true), |
||||
|
IsDeleted = table.Column<bool>(nullable: false, defaultValue: false), |
||||
|
DeleterId = table.Column<Guid>(nullable: true), |
||||
|
DeletionTime = table.Column<DateTime>(nullable: true), |
||||
|
ClientId = table.Column<string>(maxLength: 200, nullable: false), |
||||
|
ClientName = table.Column<string>(maxLength: 200, nullable: true), |
||||
|
Description = table.Column<string>(maxLength: 1000, nullable: true), |
||||
|
ClientUri = table.Column<string>(maxLength: 2000, nullable: true), |
||||
|
LogoUri = table.Column<string>(maxLength: 2000, nullable: true), |
||||
|
Enabled = table.Column<bool>(nullable: false), |
||||
|
ProtocolType = table.Column<string>(maxLength: 200, nullable: false), |
||||
|
RequireClientSecret = table.Column<bool>(nullable: false), |
||||
|
RequireConsent = table.Column<bool>(nullable: false), |
||||
|
AllowRememberConsent = table.Column<bool>(nullable: false), |
||||
|
AlwaysIncludeUserClaimsInIdToken = table.Column<bool>(nullable: false), |
||||
|
RequirePkce = table.Column<bool>(nullable: false), |
||||
|
AllowPlainTextPkce = table.Column<bool>(nullable: false), |
||||
|
AllowAccessTokensViaBrowser = table.Column<bool>(nullable: false), |
||||
|
FrontChannelLogoutUri = table.Column<string>(maxLength: 2000, nullable: true), |
||||
|
FrontChannelLogoutSessionRequired = table.Column<bool>(nullable: false), |
||||
|
BackChannelLogoutUri = table.Column<string>(maxLength: 2000, nullable: true), |
||||
|
BackChannelLogoutSessionRequired = table.Column<bool>(nullable: false), |
||||
|
AllowOfflineAccess = table.Column<bool>(nullable: false), |
||||
|
IdentityTokenLifetime = table.Column<int>(nullable: false), |
||||
|
AccessTokenLifetime = table.Column<int>(nullable: false), |
||||
|
AuthorizationCodeLifetime = table.Column<int>(nullable: false), |
||||
|
ConsentLifetime = table.Column<int>(nullable: true), |
||||
|
AbsoluteRefreshTokenLifetime = table.Column<int>(nullable: false), |
||||
|
SlidingRefreshTokenLifetime = table.Column<int>(nullable: false), |
||||
|
RefreshTokenUsage = table.Column<int>(nullable: false), |
||||
|
UpdateAccessTokenClaimsOnRefresh = table.Column<bool>(nullable: false), |
||||
|
RefreshTokenExpiration = table.Column<int>(nullable: false), |
||||
|
AccessTokenType = table.Column<int>(nullable: false), |
||||
|
EnableLocalLogin = table.Column<bool>(nullable: false), |
||||
|
IncludeJwtId = table.Column<bool>(nullable: false), |
||||
|
AlwaysSendClientClaims = table.Column<bool>(nullable: false), |
||||
|
ClientClaimsPrefix = table.Column<string>(maxLength: 200, nullable: true), |
||||
|
PairWiseSubjectSalt = table.Column<string>(maxLength: 200, nullable: true), |
||||
|
UserSsoLifetime = table.Column<int>(nullable: true), |
||||
|
UserCodeType = table.Column<string>(maxLength: 100, nullable: true), |
||||
|
DeviceCodeLifetime = table.Column<int>(nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerClients", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerDeviceFlowCodes", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(nullable: false), |
||||
|
ExtraProperties = table.Column<string>(nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(maxLength: 40, nullable: true), |
||||
|
CreationTime = table.Column<DateTime>(nullable: false), |
||||
|
CreatorId = table.Column<Guid>(nullable: true), |
||||
|
DeviceCode = table.Column<string>(maxLength: 200, nullable: false), |
||||
|
UserCode = table.Column<string>(maxLength: 200, nullable: false), |
||||
|
SubjectId = table.Column<string>(maxLength: 200, nullable: true), |
||||
|
ClientId = table.Column<string>(maxLength: 200, nullable: false), |
||||
|
Expiration = table.Column<DateTime>(nullable: false), |
||||
|
Data = table.Column<string>(maxLength: 50000, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerDeviceFlowCodes", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerIdentityResources", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Id = table.Column<Guid>(nullable: false), |
||||
|
ExtraProperties = table.Column<string>(nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(maxLength: 40, nullable: true), |
||||
|
CreationTime = table.Column<DateTime>(nullable: false), |
||||
|
CreatorId = table.Column<Guid>(nullable: true), |
||||
|
LastModificationTime = table.Column<DateTime>(nullable: true), |
||||
|
LastModifierId = table.Column<Guid>(nullable: true), |
||||
|
IsDeleted = table.Column<bool>(nullable: false, defaultValue: false), |
||||
|
DeleterId = table.Column<Guid>(nullable: true), |
||||
|
DeletionTime = table.Column<DateTime>(nullable: true), |
||||
|
Name = table.Column<string>(maxLength: 200, nullable: false), |
||||
|
DisplayName = table.Column<string>(maxLength: 200, nullable: true), |
||||
|
Description = table.Column<string>(maxLength: 1000, nullable: true), |
||||
|
Enabled = table.Column<bool>(nullable: false), |
||||
|
Required = table.Column<bool>(nullable: false), |
||||
|
Emphasize = table.Column<bool>(nullable: false), |
||||
|
ShowInDiscoveryDocument = table.Column<bool>(nullable: false), |
||||
|
Properties = table.Column<string>(nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerIdentityResources", x => x.Id); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerPersistedGrants", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Key = table.Column<string>(maxLength: 200, nullable: false), |
||||
|
Id = table.Column<Guid>(nullable: false), |
||||
|
ExtraProperties = table.Column<string>(nullable: true), |
||||
|
ConcurrencyStamp = table.Column<string>(maxLength: 40, nullable: true), |
||||
|
Type = table.Column<string>(maxLength: 50, nullable: false), |
||||
|
SubjectId = table.Column<string>(maxLength: 200, nullable: true), |
||||
|
ClientId = table.Column<string>(maxLength: 200, nullable: false), |
||||
|
CreationTime = table.Column<DateTime>(nullable: false), |
||||
|
Expiration = table.Column<DateTime>(nullable: true), |
||||
|
Data = table.Column<string>(maxLength: 50000, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerPersistedGrants", x => x.Key); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerApiClaims", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Type = table.Column<string>(maxLength: 200, nullable: false), |
||||
|
ApiResourceId = table.Column<Guid>(nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerApiClaims", x => new { x.ApiResourceId, x.Type }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerApiClaims_IdentityServerApiResources_ApiResourceId", |
||||
|
column: x => x.ApiResourceId, |
||||
|
principalTable: "IdentityServerApiResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerApiScopes", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ApiResourceId = table.Column<Guid>(nullable: false), |
||||
|
Name = table.Column<string>(maxLength: 200, nullable: false), |
||||
|
DisplayName = table.Column<string>(maxLength: 200, nullable: true), |
||||
|
Description = table.Column<string>(maxLength: 1000, nullable: true), |
||||
|
Required = table.Column<bool>(nullable: false), |
||||
|
Emphasize = table.Column<bool>(nullable: false), |
||||
|
ShowInDiscoveryDocument = table.Column<bool>(nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerApiScopes", x => new { x.ApiResourceId, x.Name }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerApiScopes_IdentityServerApiResources_ApiResourceId", |
||||
|
column: x => x.ApiResourceId, |
||||
|
principalTable: "IdentityServerApiResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerApiSecrets", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Type = table.Column<string>(maxLength: 250, nullable: false), |
||||
|
Value = table.Column<string>(maxLength: 4000, nullable: false), |
||||
|
ApiResourceId = table.Column<Guid>(nullable: false), |
||||
|
Description = table.Column<string>(maxLength: 2000, nullable: true), |
||||
|
Expiration = table.Column<DateTime>(nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerApiSecrets", x => new { x.ApiResourceId, x.Type, x.Value }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerApiSecrets_IdentityServerApiResources_ApiResourceId", |
||||
|
column: x => x.ApiResourceId, |
||||
|
principalTable: "IdentityServerApiResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerClientClaims", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ClientId = table.Column<Guid>(nullable: false), |
||||
|
Type = table.Column<string>(maxLength: 250, nullable: false), |
||||
|
Value = table.Column<string>(maxLength: 250, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerClientClaims", x => new { x.ClientId, x.Type, x.Value }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerClientClaims_IdentityServerClients_ClientId", |
||||
|
column: x => x.ClientId, |
||||
|
principalTable: "IdentityServerClients", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerClientCorsOrigins", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ClientId = table.Column<Guid>(nullable: false), |
||||
|
Origin = table.Column<string>(maxLength: 150, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerClientCorsOrigins", x => new { x.ClientId, x.Origin }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerClientCorsOrigins_IdentityServerClients_ClientId", |
||||
|
column: x => x.ClientId, |
||||
|
principalTable: "IdentityServerClients", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerClientGrantTypes", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ClientId = table.Column<Guid>(nullable: false), |
||||
|
GrantType = table.Column<string>(maxLength: 250, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerClientGrantTypes", x => new { x.ClientId, x.GrantType }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerClientGrantTypes_IdentityServerClients_ClientId", |
||||
|
column: x => x.ClientId, |
||||
|
principalTable: "IdentityServerClients", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerClientIdPRestrictions", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ClientId = table.Column<Guid>(nullable: false), |
||||
|
Provider = table.Column<string>(maxLength: 200, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerClientIdPRestrictions", x => new { x.ClientId, x.Provider }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerClientIdPRestrictions_IdentityServerClients_ClientId", |
||||
|
column: x => x.ClientId, |
||||
|
principalTable: "IdentityServerClients", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerClientPostLogoutRedirectUris", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ClientId = table.Column<Guid>(nullable: false), |
||||
|
PostLogoutRedirectUri = table.Column<string>(maxLength: 2000, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerClientPostLogoutRedirectUris", x => new { x.ClientId, x.PostLogoutRedirectUri }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerClientPostLogoutRedirectUris_IdentityServerClients_ClientId", |
||||
|
column: x => x.ClientId, |
||||
|
principalTable: "IdentityServerClients", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerClientProperties", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ClientId = table.Column<Guid>(nullable: false), |
||||
|
Key = table.Column<string>(maxLength: 250, nullable: false), |
||||
|
Value = table.Column<string>(maxLength: 2000, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerClientProperties", x => new { x.ClientId, x.Key }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerClientProperties_IdentityServerClients_ClientId", |
||||
|
column: x => x.ClientId, |
||||
|
principalTable: "IdentityServerClients", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerClientRedirectUris", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ClientId = table.Column<Guid>(nullable: false), |
||||
|
RedirectUri = table.Column<string>(maxLength: 2000, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerClientRedirectUris", x => new { x.ClientId, x.RedirectUri }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerClientRedirectUris_IdentityServerClients_ClientId", |
||||
|
column: x => x.ClientId, |
||||
|
principalTable: "IdentityServerClients", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerClientScopes", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ClientId = table.Column<Guid>(nullable: false), |
||||
|
Scope = table.Column<string>(maxLength: 200, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerClientScopes", x => new { x.ClientId, x.Scope }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerClientScopes_IdentityServerClients_ClientId", |
||||
|
column: x => x.ClientId, |
||||
|
principalTable: "IdentityServerClients", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerClientSecrets", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Type = table.Column<string>(maxLength: 250, nullable: false), |
||||
|
Value = table.Column<string>(maxLength: 4000, nullable: false), |
||||
|
ClientId = table.Column<Guid>(nullable: false), |
||||
|
Description = table.Column<string>(maxLength: 2000, nullable: true), |
||||
|
Expiration = table.Column<DateTime>(nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerClientSecrets", x => new { x.ClientId, x.Type, x.Value }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerClientSecrets_IdentityServerClients_ClientId", |
||||
|
column: x => x.ClientId, |
||||
|
principalTable: "IdentityServerClients", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerIdentityClaims", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Type = table.Column<string>(maxLength: 200, nullable: false), |
||||
|
IdentityResourceId = table.Column<Guid>(nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerIdentityClaims", x => new { x.IdentityResourceId, x.Type }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerIdentityClaims_IdentityServerIdentityResources_IdentityResourceId", |
||||
|
column: x => x.IdentityResourceId, |
||||
|
principalTable: "IdentityServerIdentityResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerApiScopeClaims", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Type = table.Column<string>(maxLength: 200, nullable: false), |
||||
|
ApiResourceId = table.Column<Guid>(nullable: false), |
||||
|
Name = table.Column<string>(maxLength: 200, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerApiScopeClaims", x => new { x.ApiResourceId, x.Name, x.Type }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerApiScopeClaims_IdentityServerApiScopes_ApiResourceId_Name", |
||||
|
columns: x => new { x.ApiResourceId, x.Name }, |
||||
|
principalTable: "IdentityServerApiScopes", |
||||
|
principalColumns: new[] { "ApiResourceId", "Name" }, |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_IdentityServerClients_ClientId", |
||||
|
table: "IdentityServerClients", |
||||
|
column: "ClientId"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_IdentityServerDeviceFlowCodes_DeviceCode", |
||||
|
table: "IdentityServerDeviceFlowCodes", |
||||
|
column: "DeviceCode", |
||||
|
unique: true); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_IdentityServerDeviceFlowCodes_Expiration", |
||||
|
table: "IdentityServerDeviceFlowCodes", |
||||
|
column: "Expiration"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_IdentityServerDeviceFlowCodes_UserCode", |
||||
|
table: "IdentityServerDeviceFlowCodes", |
||||
|
column: "UserCode", |
||||
|
unique: true); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_IdentityServerPersistedGrants_Expiration", |
||||
|
table: "IdentityServerPersistedGrants", |
||||
|
column: "Expiration"); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_IdentityServerPersistedGrants_SubjectId_ClientId_Type", |
||||
|
table: "IdentityServerPersistedGrants", |
||||
|
columns: new[] { "SubjectId", "ClientId", "Type" }); |
||||
|
} |
||||
|
|
||||
|
protected override void Down(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerApiClaims"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerApiScopeClaims"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerApiSecrets"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerClientClaims"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerClientCorsOrigins"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerClientGrantTypes"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerClientIdPRestrictions"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerClientPostLogoutRedirectUris"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerClientProperties"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerClientRedirectUris"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerClientScopes"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerClientSecrets"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerDeviceFlowCodes"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerIdentityClaims"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerPersistedGrants"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerClients"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerIdentityResources"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerApiResources"); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,846 @@ |
|||||
|
// <auto-generated />
|
||||
|
using System; |
||||
|
using AuthServer.Host.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 AuthServer.Host.Migrations |
||||
|
{ |
||||
|
[DbContext(typeof(AuthServerDbContext))] |
||||
|
[Migration("20201118072557_data1118")] |
||||
|
partial class data1118 |
||||
|
{ |
||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder) |
||||
|
{ |
||||
|
#pragma warning disable 612, 618
|
||||
|
modelBuilder |
||||
|
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) |
||||
|
.HasAnnotation("ProductVersion", "3.1.6") |
||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128) |
||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<Guid?>("DeleterId") |
||||
|
.HasColumnName("DeleterId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<DateTime?>("DeletionTime") |
||||
|
.HasColumnName("DeletionTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(1000)") |
||||
|
.HasMaxLength(1000); |
||||
|
|
||||
|
b.Property<string>("DisplayName") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<bool>("Enabled") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("IsDeleted") |
||||
|
.HasColumnType("bit") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnName("LastModificationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnName("LastModifierId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Properties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiResources"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ApiResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("ApiResourceId", "Type"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ApiResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(1000)") |
||||
|
.HasMaxLength(1000); |
||||
|
|
||||
|
b.Property<string>("DisplayName") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<bool>("Emphasize") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("Required") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("ShowInDiscoveryDocument") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.HasKey("ApiResourceId", "Name"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiScopes"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ApiResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("ApiResourceId", "Name", "Type"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiScopeClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ApiResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.Property<string>("Value") |
||||
|
.HasColumnType("nvarchar(4000)") |
||||
|
.HasMaxLength(4000); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<DateTime?>("Expiration") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.HasKey("ApiResourceId", "Type", "Value"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiSecrets"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<int>("AbsoluteRefreshTokenLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<int>("AccessTokenLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<int>("AccessTokenType") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("AllowAccessTokensViaBrowser") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AllowOfflineAccess") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AllowPlainTextPkce") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AllowRememberConsent") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AlwaysIncludeUserClaimsInIdToken") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AlwaysSendClientClaims") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<int>("AuthorizationCodeLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("BackChannelLogoutSessionRequired") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("BackChannelLogoutUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<string>("ClientClaimsPrefix") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ClientId") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ClientName") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ClientUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<int?>("ConsentLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<Guid?>("DeleterId") |
||||
|
.HasColumnName("DeleterId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<DateTime?>("DeletionTime") |
||||
|
.HasColumnName("DeletionTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(1000)") |
||||
|
.HasMaxLength(1000); |
||||
|
|
||||
|
b.Property<int>("DeviceCodeLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("EnableLocalLogin") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("Enabled") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<bool>("FrontChannelLogoutSessionRequired") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("FrontChannelLogoutUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<int>("IdentityTokenLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("IncludeJwtId") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("IsDeleted") |
||||
|
.HasColumnType("bit") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnName("LastModificationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnName("LastModifierId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("LogoUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<string>("PairWiseSubjectSalt") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ProtocolType") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<int>("RefreshTokenExpiration") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<int>("RefreshTokenUsage") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("RequireClientSecret") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("RequireConsent") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("RequirePkce") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<int>("SlidingRefreshTokenLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("UpdateAccessTokenClaimsOnRefresh") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("UserCodeType") |
||||
|
.HasColumnType("nvarchar(100)") |
||||
|
.HasMaxLength(100); |
||||
|
|
||||
|
b.Property<int?>("UserSsoLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("ClientId"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClients"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.Property<string>("Value") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.HasKey("ClientId", "Type", "Value"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Origin") |
||||
|
.HasColumnType("nvarchar(150)") |
||||
|
.HasMaxLength(150); |
||||
|
|
||||
|
b.HasKey("ClientId", "Origin"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientCorsOrigins"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("GrantType") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.HasKey("ClientId", "GrantType"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientGrantTypes"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Provider") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("ClientId", "Provider"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientIdPRestrictions"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("PostLogoutRedirectUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.HasKey("ClientId", "PostLogoutRedirectUri"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientPostLogoutRedirectUris"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Key") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.Property<string>("Value") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.HasKey("ClientId", "Key"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientProperties"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("RedirectUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.HasKey("ClientId", "RedirectUri"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientRedirectUris"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Scope") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("ClientId", "Scope"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientScopes"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.Property<string>("Value") |
||||
|
.HasColumnType("nvarchar(4000)") |
||||
|
.HasMaxLength(4000); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<DateTime?>("Expiration") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.HasKey("ClientId", "Type", "Value"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientSecrets"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("ClientId") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Data") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(max)") |
||||
|
.HasMaxLength(50000); |
||||
|
|
||||
|
b.Property<string>("DeviceCode") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<DateTime?>("Expiration") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<string>("SubjectId") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("UserCode") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("DeviceCode") |
||||
|
.IsUnique(); |
||||
|
|
||||
|
b.HasIndex("Expiration"); |
||||
|
|
||||
|
b.HasIndex("UserCode") |
||||
|
.IsUnique(); |
||||
|
|
||||
|
b.ToTable("IdentityServerDeviceFlowCodes"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => |
||||
|
{ |
||||
|
b.Property<string>("Key") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ClientId") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("Data") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(max)") |
||||
|
.HasMaxLength(50000); |
||||
|
|
||||
|
b.Property<DateTime?>("Expiration") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<Guid>("Id") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("SubjectId") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(50)") |
||||
|
.HasMaxLength(50); |
||||
|
|
||||
|
b.HasKey("Key"); |
||||
|
|
||||
|
b.HasIndex("Expiration"); |
||||
|
|
||||
|
b.HasIndex("SubjectId", "ClientId", "Type"); |
||||
|
|
||||
|
b.ToTable("IdentityServerPersistedGrants"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("IdentityResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("IdentityResourceId", "Type"); |
||||
|
|
||||
|
b.ToTable("IdentityServerIdentityClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<Guid?>("DeleterId") |
||||
|
.HasColumnName("DeleterId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<DateTime?>("DeletionTime") |
||||
|
.HasColumnName("DeletionTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(1000)") |
||||
|
.HasMaxLength(1000); |
||||
|
|
||||
|
b.Property<string>("DisplayName") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<bool>("Emphasize") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("Enabled") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("IsDeleted") |
||||
|
.HasColumnType("bit") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnName("LastModificationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnName("LastModifierId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Properties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<bool>("Required") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("ShowInDiscoveryDocument") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.ToTable("IdentityServerIdentityResources"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) |
||||
|
.WithMany("UserClaims") |
||||
|
.HasForeignKey("ApiResourceId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) |
||||
|
.WithMany("Scopes") |
||||
|
.HasForeignKey("ApiResourceId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiScope", null) |
||||
|
.WithMany("UserClaims") |
||||
|
.HasForeignKey("ApiResourceId", "Name") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) |
||||
|
.WithMany("Secrets") |
||||
|
.HasForeignKey("ApiResourceId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("Claims") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("AllowedCorsOrigins") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("AllowedGrantTypes") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("IdentityProviderRestrictions") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("PostLogoutRedirectUris") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("Properties") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("RedirectUris") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("AllowedScopes") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("ClientSecrets") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", null) |
||||
|
.WithMany("UserClaims") |
||||
|
.HasForeignKey("IdentityResourceId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
#pragma warning restore 612, 618
|
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
|
||||
|
namespace AuthServer.Host.Migrations |
||||
|
{ |
||||
|
public partial class data1118 : Migration |
||||
|
{ |
||||
|
protected override void Up(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
protected override void Down(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,846 @@ |
|||||
|
// <auto-generated />
|
||||
|
using System; |
||||
|
using AuthServer.Host.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 AuthServer.Host.Migrations |
||||
|
{ |
||||
|
[DbContext(typeof(AuthServerDbContext))] |
||||
|
[Migration("20201118083155_data")] |
||||
|
partial class data |
||||
|
{ |
||||
|
protected override void BuildTargetModel(ModelBuilder modelBuilder) |
||||
|
{ |
||||
|
#pragma warning disable 612, 618
|
||||
|
modelBuilder |
||||
|
.HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) |
||||
|
.HasAnnotation("ProductVersion", "3.1.6") |
||||
|
.HasAnnotation("Relational:MaxIdentifierLength", 128) |
||||
|
.HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<Guid?>("DeleterId") |
||||
|
.HasColumnName("DeleterId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<DateTime?>("DeletionTime") |
||||
|
.HasColumnName("DeletionTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(1000)") |
||||
|
.HasMaxLength(1000); |
||||
|
|
||||
|
b.Property<string>("DisplayName") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<bool>("Enabled") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("IsDeleted") |
||||
|
.HasColumnType("bit") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnName("LastModificationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnName("LastModifierId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Properties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiResources"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ApiResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("ApiResourceId", "Type"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ApiResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(1000)") |
||||
|
.HasMaxLength(1000); |
||||
|
|
||||
|
b.Property<string>("DisplayName") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<bool>("Emphasize") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("Required") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("ShowInDiscoveryDocument") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.HasKey("ApiResourceId", "Name"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiScopes"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ApiResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("ApiResourceId", "Name", "Type"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiScopeClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ApiResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.Property<string>("Value") |
||||
|
.HasColumnType("nvarchar(4000)") |
||||
|
.HasMaxLength(4000); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<DateTime?>("Expiration") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.HasKey("ApiResourceId", "Type", "Value"); |
||||
|
|
||||
|
b.ToTable("IdentityServerApiSecrets"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<int>("AbsoluteRefreshTokenLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<int>("AccessTokenLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<int>("AccessTokenType") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("AllowAccessTokensViaBrowser") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AllowOfflineAccess") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AllowPlainTextPkce") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AllowRememberConsent") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AlwaysIncludeUserClaimsInIdToken") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("AlwaysSendClientClaims") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<int>("AuthorizationCodeLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("BackChannelLogoutSessionRequired") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("BackChannelLogoutUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<string>("ClientClaimsPrefix") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ClientId") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ClientName") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ClientUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<int?>("ConsentLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<Guid?>("DeleterId") |
||||
|
.HasColumnName("DeleterId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<DateTime?>("DeletionTime") |
||||
|
.HasColumnName("DeletionTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(1000)") |
||||
|
.HasMaxLength(1000); |
||||
|
|
||||
|
b.Property<int>("DeviceCodeLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("EnableLocalLogin") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("Enabled") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<bool>("FrontChannelLogoutSessionRequired") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("FrontChannelLogoutUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<int>("IdentityTokenLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("IncludeJwtId") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("IsDeleted") |
||||
|
.HasColumnType("bit") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnName("LastModificationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnName("LastModifierId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("LogoUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<string>("PairWiseSubjectSalt") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ProtocolType") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<int>("RefreshTokenExpiration") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<int>("RefreshTokenUsage") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("RequireClientSecret") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("RequireConsent") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("RequirePkce") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<int>("SlidingRefreshTokenLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.Property<bool>("UpdateAccessTokenClaimsOnRefresh") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("UserCodeType") |
||||
|
.HasColumnType("nvarchar(100)") |
||||
|
.HasMaxLength(100); |
||||
|
|
||||
|
b.Property<int?>("UserSsoLifetime") |
||||
|
.HasColumnType("int"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("ClientId"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClients"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.Property<string>("Value") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.HasKey("ClientId", "Type", "Value"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Origin") |
||||
|
.HasColumnType("nvarchar(150)") |
||||
|
.HasMaxLength(150); |
||||
|
|
||||
|
b.HasKey("ClientId", "Origin"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientCorsOrigins"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("GrantType") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.HasKey("ClientId", "GrantType"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientGrantTypes"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Provider") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("ClientId", "Provider"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientIdPRestrictions"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("PostLogoutRedirectUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.HasKey("ClientId", "PostLogoutRedirectUri"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientPostLogoutRedirectUris"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Key") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.Property<string>("Value") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.HasKey("ClientId", "Key"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientProperties"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("RedirectUri") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.HasKey("ClientId", "RedirectUri"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientRedirectUris"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Scope") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("ClientId", "Scope"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientScopes"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => |
||||
|
{ |
||||
|
b.Property<Guid>("ClientId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(250)") |
||||
|
.HasMaxLength(250); |
||||
|
|
||||
|
b.Property<string>("Value") |
||||
|
.HasColumnType("nvarchar(4000)") |
||||
|
.HasMaxLength(4000); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(2000)") |
||||
|
.HasMaxLength(2000); |
||||
|
|
||||
|
b.Property<DateTime?>("Expiration") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.HasKey("ClientId", "Type", "Value"); |
||||
|
|
||||
|
b.ToTable("IdentityServerClientSecrets"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("ClientId") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Data") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(max)") |
||||
|
.HasMaxLength(50000); |
||||
|
|
||||
|
b.Property<string>("DeviceCode") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<DateTime?>("Expiration") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<string>("SubjectId") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("UserCode") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.HasIndex("DeviceCode") |
||||
|
.IsUnique(); |
||||
|
|
||||
|
b.HasIndex("Expiration"); |
||||
|
|
||||
|
b.HasIndex("UserCode") |
||||
|
.IsUnique(); |
||||
|
|
||||
|
b.ToTable("IdentityServerDeviceFlowCodes"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => |
||||
|
{ |
||||
|
b.Property<string>("Key") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ClientId") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("Data") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(max)") |
||||
|
.HasMaxLength(50000); |
||||
|
|
||||
|
b.Property<DateTime?>("Expiration") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<Guid>("Id") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("SubjectId") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(50)") |
||||
|
.HasMaxLength(50); |
||||
|
|
||||
|
b.HasKey("Key"); |
||||
|
|
||||
|
b.HasIndex("Expiration"); |
||||
|
|
||||
|
b.HasIndex("SubjectId", "ClientId", "Type"); |
||||
|
|
||||
|
b.ToTable("IdentityServerPersistedGrants"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => |
||||
|
{ |
||||
|
b.Property<Guid>("IdentityResourceId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Type") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.HasKey("IdentityResourceId", "Type"); |
||||
|
|
||||
|
b.ToTable("IdentityServerIdentityClaims"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b => |
||||
|
{ |
||||
|
b.Property<Guid>("Id") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("ConcurrencyStamp") |
||||
|
.IsConcurrencyToken() |
||||
|
.HasColumnName("ConcurrencyStamp") |
||||
|
.HasColumnType("nvarchar(40)") |
||||
|
.HasMaxLength(40); |
||||
|
|
||||
|
b.Property<DateTime>("CreationTime") |
||||
|
.HasColumnName("CreationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("CreatorId") |
||||
|
.HasColumnName("CreatorId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<Guid?>("DeleterId") |
||||
|
.HasColumnName("DeleterId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<DateTime?>("DeletionTime") |
||||
|
.HasColumnName("DeletionTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<string>("Description") |
||||
|
.HasColumnType("nvarchar(1000)") |
||||
|
.HasMaxLength(1000); |
||||
|
|
||||
|
b.Property<string>("DisplayName") |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<bool>("Emphasize") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("Enabled") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<string>("ExtraProperties") |
||||
|
.HasColumnName("ExtraProperties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<bool>("IsDeleted") |
||||
|
.ValueGeneratedOnAdd() |
||||
|
.HasColumnName("IsDeleted") |
||||
|
.HasColumnType("bit") |
||||
|
.HasDefaultValue(false); |
||||
|
|
||||
|
b.Property<DateTime?>("LastModificationTime") |
||||
|
.HasColumnName("LastModificationTime") |
||||
|
.HasColumnType("datetime2"); |
||||
|
|
||||
|
b.Property<Guid?>("LastModifierId") |
||||
|
.HasColumnName("LastModifierId") |
||||
|
.HasColumnType("uniqueidentifier"); |
||||
|
|
||||
|
b.Property<string>("Name") |
||||
|
.IsRequired() |
||||
|
.HasColumnType("nvarchar(200)") |
||||
|
.HasMaxLength(200); |
||||
|
|
||||
|
b.Property<string>("Properties") |
||||
|
.HasColumnType("nvarchar(max)"); |
||||
|
|
||||
|
b.Property<bool>("Required") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.Property<bool>("ShowInDiscoveryDocument") |
||||
|
.HasColumnType("bit"); |
||||
|
|
||||
|
b.HasKey("Id"); |
||||
|
|
||||
|
b.ToTable("IdentityServerIdentityResources"); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) |
||||
|
.WithMany("UserClaims") |
||||
|
.HasForeignKey("ApiResourceId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScope", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) |
||||
|
.WithMany("Scopes") |
||||
|
.HasForeignKey("ApiResourceId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiScopeClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiScope", null) |
||||
|
.WithMany("UserClaims") |
||||
|
.HasForeignKey("ApiResourceId", "Name") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiSecret", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) |
||||
|
.WithMany("Secrets") |
||||
|
.HasForeignKey("ApiResourceId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("Claims") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("AllowedCorsOrigins") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("AllowedGrantTypes") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("IdentityProviderRestrictions") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("PostLogoutRedirectUris") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("Properties") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("RedirectUris") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("AllowedScopes") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) |
||||
|
.WithMany("ClientSecrets") |
||||
|
.HasForeignKey("ClientId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
|
||||
|
modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityClaim", b => |
||||
|
{ |
||||
|
b.HasOne("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", null) |
||||
|
.WithMany("UserClaims") |
||||
|
.HasForeignKey("IdentityResourceId") |
||||
|
.OnDelete(DeleteBehavior.Cascade) |
||||
|
.IsRequired(); |
||||
|
}); |
||||
|
#pragma warning restore 612, 618
|
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,17 @@ |
|||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
|
||||
|
namespace AuthServer.Host.Migrations |
||||
|
{ |
||||
|
public partial class data : Migration |
||||
|
{ |
||||
|
protected override void Up(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
|
||||
|
protected override void Down(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,613 @@ |
|||||
|
using System; |
||||
|
using Microsoft.EntityFrameworkCore.Migrations; |
||||
|
|
||||
|
namespace AuthServer.Host.Migrations |
||||
|
{ |
||||
|
public partial class update : Migration |
||||
|
{ |
||||
|
protected override void Up(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.DropForeignKey( |
||||
|
name: "FK_IdentityServerApiClaims_IdentityServerApiResources_ApiResourceId", |
||||
|
table: "IdentityServerApiClaims"); |
||||
|
|
||||
|
migrationBuilder.DropForeignKey( |
||||
|
name: "FK_IdentityServerApiScopeClaims_IdentityServerApiScopes_ApiResourceId_Name", |
||||
|
table: "IdentityServerApiScopeClaims"); |
||||
|
|
||||
|
migrationBuilder.DropForeignKey( |
||||
|
name: "FK_IdentityServerApiScopes_IdentityServerApiResources_ApiResourceId", |
||||
|
table: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerApiSecrets"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerIdentityClaims"); |
||||
|
|
||||
|
migrationBuilder.DropIndex( |
||||
|
name: "IX_IdentityServerDeviceFlowCodes_UserCode", |
||||
|
table: "IdentityServerDeviceFlowCodes"); |
||||
|
|
||||
|
migrationBuilder.DropPrimaryKey( |
||||
|
name: "PK_IdentityServerClientProperties", |
||||
|
table: "IdentityServerClientProperties"); |
||||
|
|
||||
|
migrationBuilder.DropPrimaryKey( |
||||
|
name: "PK_IdentityServerApiScopes", |
||||
|
table: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropPrimaryKey( |
||||
|
name: "PK_IdentityServerApiScopeClaims", |
||||
|
table: "IdentityServerApiScopeClaims"); |
||||
|
|
||||
|
migrationBuilder.DropPrimaryKey( |
||||
|
name: "PK_IdentityServerApiClaims", |
||||
|
table: "IdentityServerApiClaims"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "Properties", |
||||
|
table: "IdentityServerIdentityResources"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "Name", |
||||
|
table: "IdentityServerApiScopeClaims"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "Properties", |
||||
|
table: "IdentityServerApiResources"); |
||||
|
|
||||
|
migrationBuilder.RenameTable( |
||||
|
name: "IdentityServerApiClaims", |
||||
|
newName: "IdentityServerApiResourceClaims"); |
||||
|
|
||||
|
migrationBuilder.RenameColumn( |
||||
|
name: "ApiResourceId", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
newName: "Id"); |
||||
|
|
||||
|
migrationBuilder.RenameColumn( |
||||
|
name: "ApiResourceId", |
||||
|
table: "IdentityServerApiScopeClaims", |
||||
|
newName: "ApiScopeId"); |
||||
|
|
||||
|
migrationBuilder.AddColumn<DateTime>( |
||||
|
name: "ConsumedTime", |
||||
|
table: "IdentityServerPersistedGrants", |
||||
|
type: "datetime2", |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<string>( |
||||
|
name: "Description", |
||||
|
table: "IdentityServerPersistedGrants", |
||||
|
type: "nvarchar(200)", |
||||
|
maxLength: 200, |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<string>( |
||||
|
name: "SessionId", |
||||
|
table: "IdentityServerPersistedGrants", |
||||
|
type: "nvarchar(100)", |
||||
|
maxLength: 100, |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<string>( |
||||
|
name: "Description", |
||||
|
table: "IdentityServerDeviceFlowCodes", |
||||
|
type: "nvarchar(200)", |
||||
|
maxLength: 200, |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<string>( |
||||
|
name: "SessionId", |
||||
|
table: "IdentityServerDeviceFlowCodes", |
||||
|
type: "nvarchar(100)", |
||||
|
maxLength: 100, |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<string>( |
||||
|
name: "AllowedIdentityTokenSigningAlgorithms", |
||||
|
table: "IdentityServerClients", |
||||
|
type: "nvarchar(100)", |
||||
|
maxLength: 100, |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<bool>( |
||||
|
name: "RequireRequestObject", |
||||
|
table: "IdentityServerClients", |
||||
|
type: "bit", |
||||
|
nullable: false, |
||||
|
defaultValue: false); |
||||
|
|
||||
|
migrationBuilder.AddColumn<string>( |
||||
|
name: "ConcurrencyStamp", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
type: "nvarchar(40)", |
||||
|
maxLength: 40, |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<DateTime>( |
||||
|
name: "CreationTime", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
type: "datetime2", |
||||
|
nullable: false, |
||||
|
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)); |
||||
|
|
||||
|
migrationBuilder.AddColumn<Guid>( |
||||
|
name: "CreatorId", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
type: "uniqueidentifier", |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<Guid>( |
||||
|
name: "DeleterId", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
type: "uniqueidentifier", |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<DateTime>( |
||||
|
name: "DeletionTime", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
type: "datetime2", |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<bool>( |
||||
|
name: "Enabled", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
type: "bit", |
||||
|
nullable: false, |
||||
|
defaultValue: false); |
||||
|
|
||||
|
migrationBuilder.AddColumn<string>( |
||||
|
name: "ExtraProperties", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
type: "nvarchar(max)", |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<bool>( |
||||
|
name: "IsDeleted", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
type: "bit", |
||||
|
nullable: false, |
||||
|
defaultValue: false); |
||||
|
|
||||
|
migrationBuilder.AddColumn<DateTime>( |
||||
|
name: "LastModificationTime", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
type: "datetime2", |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<Guid>( |
||||
|
name: "LastModifierId", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
type: "uniqueidentifier", |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<string>( |
||||
|
name: "AllowedAccessTokenSigningAlgorithms", |
||||
|
table: "IdentityServerApiResources", |
||||
|
type: "nvarchar(100)", |
||||
|
maxLength: 100, |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<bool>( |
||||
|
name: "ShowInDiscoveryDocument", |
||||
|
table: "IdentityServerApiResources", |
||||
|
type: "bit", |
||||
|
nullable: false, |
||||
|
defaultValue: false); |
||||
|
|
||||
|
migrationBuilder.AddPrimaryKey( |
||||
|
name: "PK_IdentityServerClientProperties", |
||||
|
table: "IdentityServerClientProperties", |
||||
|
columns: new[] { "ClientId", "Key", "Value" }); |
||||
|
|
||||
|
migrationBuilder.AddPrimaryKey( |
||||
|
name: "PK_IdentityServerApiScopes", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
column: "Id"); |
||||
|
|
||||
|
migrationBuilder.AddPrimaryKey( |
||||
|
name: "PK_IdentityServerApiScopeClaims", |
||||
|
table: "IdentityServerApiScopeClaims", |
||||
|
columns: new[] { "ApiScopeId", "Type" }); |
||||
|
|
||||
|
migrationBuilder.AddPrimaryKey( |
||||
|
name: "PK_IdentityServerApiResourceClaims", |
||||
|
table: "IdentityServerApiResourceClaims", |
||||
|
columns: new[] { "ApiResourceId", "Type" }); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerApiResourceProperties", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ApiResourceId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
Key = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false), |
||||
|
Value = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerApiResourceProperties", x => new { x.ApiResourceId, x.Key, x.Value }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerApiResourceProperties_IdentityServerApiResources_ApiResourceId", |
||||
|
column: x => x.ApiResourceId, |
||||
|
principalTable: "IdentityServerApiResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerApiResourceScopes", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ApiResourceId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
Scope = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerApiResourceScopes", x => new { x.ApiResourceId, x.Scope }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerApiResourceScopes_IdentityServerApiResources_ApiResourceId", |
||||
|
column: x => x.ApiResourceId, |
||||
|
principalTable: "IdentityServerApiResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerApiResourceSecrets", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Type = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false), |
||||
|
Value = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: false), |
||||
|
ApiResourceId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
Description = table.Column<string>(type: "nvarchar(1000)", maxLength: 1000, nullable: true), |
||||
|
Expiration = table.Column<DateTime>(type: "datetime2", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerApiResourceSecrets", x => new { x.ApiResourceId, x.Type, x.Value }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerApiResourceSecrets_IdentityServerApiResources_ApiResourceId", |
||||
|
column: x => x.ApiResourceId, |
||||
|
principalTable: "IdentityServerApiResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerApiScopeProperties", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ApiScopeId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
Key = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false), |
||||
|
Value = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerApiScopeProperties", x => new { x.ApiScopeId, x.Key, x.Value }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerApiScopeProperties_IdentityServerApiScopes_ApiScopeId", |
||||
|
column: x => x.ApiScopeId, |
||||
|
principalTable: "IdentityServerApiScopes", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerIdentityResourceClaims", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
Type = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false), |
||||
|
IdentityResourceId = table.Column<Guid>(type: "uniqueidentifier", nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerIdentityResourceClaims", x => new { x.IdentityResourceId, x.Type }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerIdentityResourceClaims_IdentityServerIdentityResources_IdentityResourceId", |
||||
|
column: x => x.IdentityResourceId, |
||||
|
principalTable: "IdentityServerIdentityResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerIdentityResourceProperties", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
IdentityResourceId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
Key = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false), |
||||
|
Value = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerIdentityResourceProperties", x => new { x.IdentityResourceId, x.Key, x.Value }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerIdentityResourceProperties_IdentityServerIdentityResources_IdentityResourceId", |
||||
|
column: x => x.IdentityResourceId, |
||||
|
principalTable: "IdentityServerIdentityResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_IdentityServerPersistedGrants_SubjectId_SessionId_Type", |
||||
|
table: "IdentityServerPersistedGrants", |
||||
|
columns: new[] { "SubjectId", "SessionId", "Type" }); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_IdentityServerDeviceFlowCodes_UserCode", |
||||
|
table: "IdentityServerDeviceFlowCodes", |
||||
|
column: "UserCode"); |
||||
|
|
||||
|
migrationBuilder.AddForeignKey( |
||||
|
name: "FK_IdentityServerApiResourceClaims_IdentityServerApiResources_ApiResourceId", |
||||
|
table: "IdentityServerApiResourceClaims", |
||||
|
column: "ApiResourceId", |
||||
|
principalTable: "IdentityServerApiResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
|
||||
|
migrationBuilder.AddForeignKey( |
||||
|
name: "FK_IdentityServerApiScopeClaims_IdentityServerApiScopes_ApiScopeId", |
||||
|
table: "IdentityServerApiScopeClaims", |
||||
|
column: "ApiScopeId", |
||||
|
principalTable: "IdentityServerApiScopes", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
} |
||||
|
|
||||
|
protected override void Down(MigrationBuilder migrationBuilder) |
||||
|
{ |
||||
|
migrationBuilder.DropForeignKey( |
||||
|
name: "FK_IdentityServerApiResourceClaims_IdentityServerApiResources_ApiResourceId", |
||||
|
table: "IdentityServerApiResourceClaims"); |
||||
|
|
||||
|
migrationBuilder.DropForeignKey( |
||||
|
name: "FK_IdentityServerApiScopeClaims_IdentityServerApiScopes_ApiScopeId", |
||||
|
table: "IdentityServerApiScopeClaims"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerApiResourceProperties"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerApiResourceScopes"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerApiResourceSecrets"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerApiScopeProperties"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerIdentityResourceClaims"); |
||||
|
|
||||
|
migrationBuilder.DropTable( |
||||
|
name: "IdentityServerIdentityResourceProperties"); |
||||
|
|
||||
|
migrationBuilder.DropIndex( |
||||
|
name: "IX_IdentityServerPersistedGrants_SubjectId_SessionId_Type", |
||||
|
table: "IdentityServerPersistedGrants"); |
||||
|
|
||||
|
migrationBuilder.DropIndex( |
||||
|
name: "IX_IdentityServerDeviceFlowCodes_UserCode", |
||||
|
table: "IdentityServerDeviceFlowCodes"); |
||||
|
|
||||
|
migrationBuilder.DropPrimaryKey( |
||||
|
name: "PK_IdentityServerClientProperties", |
||||
|
table: "IdentityServerClientProperties"); |
||||
|
|
||||
|
migrationBuilder.DropPrimaryKey( |
||||
|
name: "PK_IdentityServerApiScopes", |
||||
|
table: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropPrimaryKey( |
||||
|
name: "PK_IdentityServerApiScopeClaims", |
||||
|
table: "IdentityServerApiScopeClaims"); |
||||
|
|
||||
|
migrationBuilder.DropPrimaryKey( |
||||
|
name: "PK_IdentityServerApiResourceClaims", |
||||
|
table: "IdentityServerApiResourceClaims"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "ConsumedTime", |
||||
|
table: "IdentityServerPersistedGrants"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "Description", |
||||
|
table: "IdentityServerPersistedGrants"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "SessionId", |
||||
|
table: "IdentityServerPersistedGrants"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "Description", |
||||
|
table: "IdentityServerDeviceFlowCodes"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "SessionId", |
||||
|
table: "IdentityServerDeviceFlowCodes"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "AllowedIdentityTokenSigningAlgorithms", |
||||
|
table: "IdentityServerClients"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "RequireRequestObject", |
||||
|
table: "IdentityServerClients"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "ConcurrencyStamp", |
||||
|
table: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "CreationTime", |
||||
|
table: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "CreatorId", |
||||
|
table: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "DeleterId", |
||||
|
table: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "DeletionTime", |
||||
|
table: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "Enabled", |
||||
|
table: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "ExtraProperties", |
||||
|
table: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "IsDeleted", |
||||
|
table: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "LastModificationTime", |
||||
|
table: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "LastModifierId", |
||||
|
table: "IdentityServerApiScopes"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "AllowedAccessTokenSigningAlgorithms", |
||||
|
table: "IdentityServerApiResources"); |
||||
|
|
||||
|
migrationBuilder.DropColumn( |
||||
|
name: "ShowInDiscoveryDocument", |
||||
|
table: "IdentityServerApiResources"); |
||||
|
|
||||
|
migrationBuilder.RenameTable( |
||||
|
name: "IdentityServerApiResourceClaims", |
||||
|
newName: "IdentityServerApiClaims"); |
||||
|
|
||||
|
migrationBuilder.RenameColumn( |
||||
|
name: "Id", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
newName: "ApiResourceId"); |
||||
|
|
||||
|
migrationBuilder.RenameColumn( |
||||
|
name: "ApiScopeId", |
||||
|
table: "IdentityServerApiScopeClaims", |
||||
|
newName: "ApiResourceId"); |
||||
|
|
||||
|
migrationBuilder.AddColumn<string>( |
||||
|
name: "Properties", |
||||
|
table: "IdentityServerIdentityResources", |
||||
|
type: "nvarchar(max)", |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddColumn<string>( |
||||
|
name: "Name", |
||||
|
table: "IdentityServerApiScopeClaims", |
||||
|
type: "nvarchar(200)", |
||||
|
maxLength: 200, |
||||
|
nullable: false, |
||||
|
defaultValue: ""); |
||||
|
|
||||
|
migrationBuilder.AddColumn<string>( |
||||
|
name: "Properties", |
||||
|
table: "IdentityServerApiResources", |
||||
|
type: "nvarchar(max)", |
||||
|
nullable: true); |
||||
|
|
||||
|
migrationBuilder.AddPrimaryKey( |
||||
|
name: "PK_IdentityServerClientProperties", |
||||
|
table: "IdentityServerClientProperties", |
||||
|
columns: new[] { "ClientId", "Key" }); |
||||
|
|
||||
|
migrationBuilder.AddPrimaryKey( |
||||
|
name: "PK_IdentityServerApiScopes", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
columns: new[] { "ApiResourceId", "Name" }); |
||||
|
|
||||
|
migrationBuilder.AddPrimaryKey( |
||||
|
name: "PK_IdentityServerApiScopeClaims", |
||||
|
table: "IdentityServerApiScopeClaims", |
||||
|
columns: new[] { "ApiResourceId", "Name", "Type" }); |
||||
|
|
||||
|
migrationBuilder.AddPrimaryKey( |
||||
|
name: "PK_IdentityServerApiClaims", |
||||
|
table: "IdentityServerApiClaims", |
||||
|
columns: new[] { "ApiResourceId", "Type" }); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerApiSecrets", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
ApiResourceId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
Type = table.Column<string>(type: "nvarchar(250)", maxLength: 250, nullable: false), |
||||
|
Value = table.Column<string>(type: "nvarchar(4000)", maxLength: 4000, nullable: false), |
||||
|
Description = table.Column<string>(type: "nvarchar(2000)", maxLength: 2000, nullable: true), |
||||
|
Expiration = table.Column<DateTime>(type: "datetime2", nullable: true) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerApiSecrets", x => new { x.ApiResourceId, x.Type, x.Value }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerApiSecrets_IdentityServerApiResources_ApiResourceId", |
||||
|
column: x => x.ApiResourceId, |
||||
|
principalTable: "IdentityServerApiResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateTable( |
||||
|
name: "IdentityServerIdentityClaims", |
||||
|
columns: table => new |
||||
|
{ |
||||
|
IdentityResourceId = table.Column<Guid>(type: "uniqueidentifier", nullable: false), |
||||
|
Type = table.Column<string>(type: "nvarchar(200)", maxLength: 200, nullable: false) |
||||
|
}, |
||||
|
constraints: table => |
||||
|
{ |
||||
|
table.PrimaryKey("PK_IdentityServerIdentityClaims", x => new { x.IdentityResourceId, x.Type }); |
||||
|
table.ForeignKey( |
||||
|
name: "FK_IdentityServerIdentityClaims_IdentityServerIdentityResources_IdentityResourceId", |
||||
|
column: x => x.IdentityResourceId, |
||||
|
principalTable: "IdentityServerIdentityResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
}); |
||||
|
|
||||
|
migrationBuilder.CreateIndex( |
||||
|
name: "IX_IdentityServerDeviceFlowCodes_UserCode", |
||||
|
table: "IdentityServerDeviceFlowCodes", |
||||
|
column: "UserCode", |
||||
|
unique: true); |
||||
|
|
||||
|
migrationBuilder.AddForeignKey( |
||||
|
name: "FK_IdentityServerApiClaims_IdentityServerApiResources_ApiResourceId", |
||||
|
table: "IdentityServerApiClaims", |
||||
|
column: "ApiResourceId", |
||||
|
principalTable: "IdentityServerApiResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
|
||||
|
migrationBuilder.AddForeignKey( |
||||
|
name: "FK_IdentityServerApiScopeClaims_IdentityServerApiScopes_ApiResourceId_Name", |
||||
|
table: "IdentityServerApiScopeClaims", |
||||
|
columns: new[] { "ApiResourceId", "Name" }, |
||||
|
principalTable: "IdentityServerApiScopes", |
||||
|
principalColumns: new[] { "ApiResourceId", "Name" }, |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
|
||||
|
migrationBuilder.AddForeignKey( |
||||
|
name: "FK_IdentityServerApiScopes_IdentityServerApiResources_ApiResourceId", |
||||
|
table: "IdentityServerApiScopes", |
||||
|
column: "ApiResourceId", |
||||
|
principalTable: "IdentityServerApiResources", |
||||
|
principalColumn: "Id", |
||||
|
onDelete: ReferentialAction.Cascade); |
||||
|
} |
||||
|
} |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,33 @@ |
|||||
|
@page |
||||
|
@using Volo.Abp.Users |
||||
|
@model AuthServer.Host.Pages.IndexModel |
||||
|
@inject ICurrentUser CurrentUser |
||||
|
@if (CurrentUser.IsAuthenticated) |
||||
|
{ |
||||
|
<div> |
||||
|
<abp-row> |
||||
|
<abp-column size-md="_3" class="text-center"> |
||||
|
<i class="fa fa-user d-block" style="font-size: 10em; color: #12b900"></i> |
||||
|
<a abp-button="Primary" asp-controller="Logout" asp-action="Index" asp-area="Account">Logout</a> |
||||
|
</abp-column> |
||||
|
<abp-column size-md="_9"> |
||||
|
<h2>@CurrentUser.UserName</h2> |
||||
|
<h5 class="text-muted">@CurrentUser.Email</h5> |
||||
|
<div> |
||||
|
<strong>Roles</strong>: @CurrentUser.Roles.JoinAsString(", ") |
||||
|
<br /> |
||||
|
<strong>Claims</strong>: <br /> |
||||
|
@Html.Raw(CurrentUser.GetAllClaims().Select(c => $"{c.Type}={c.Value}").JoinAsString(" <br /> ")) |
||||
|
</div> |
||||
|
</abp-column> |
||||
|
</abp-row> |
||||
|
</div> |
||||
|
} |
||||
|
|
||||
|
@if (!CurrentUser.IsAuthenticated) |
||||
|
{ |
||||
|
<div class="text-center"> |
||||
|
<img src="~/images/anonymous-user.png" width="200" /><br/><br /> |
||||
|
<a abp-button="Primary" asp-page="/Account/Login">Login</a> |
||||
|
</div> |
||||
|
} |
@ -0,0 +1,11 @@ |
|||||
|
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; |
||||
|
|
||||
|
namespace AuthServer.Host.Pages |
||||
|
{ |
||||
|
public class IndexModel : AbpPageModel |
||||
|
{ |
||||
|
public void OnGet() |
||||
|
{ |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,4 @@ |
|||||
|
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers |
||||
|
@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI |
||||
|
@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap |
||||
|
@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bundling |
@ -0,0 +1,63 @@ |
|||||
|
using System; |
||||
|
using System.IO; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.Extensions.Configuration; |
||||
|
using Microsoft.Extensions.Hosting; |
||||
|
using Serilog; |
||||
|
using Serilog.Events; |
||||
|
|
||||
|
namespace AuthServer.Host |
||||
|
{ |
||||
|
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", "AuthServer") |
||||
|
.Enrich.FromLogContext() |
||||
|
.WriteTo.File("Logs/logs.txt") |
||||
|
//.WriteTo.Elasticsearch(
|
||||
|
// new ElasticsearchSinkOptions(new Uri(configuration["ElasticSearch:Url"]))
|
||||
|
// {
|
||||
|
// AutoRegisterTemplate = true,
|
||||
|
// AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv6,
|
||||
|
// IndexFormat = "xdlms-log-{0:yyyy.MM}"
|
||||
|
// })
|
||||
|
.WriteTo.Console() |
||||
|
.CreateLogger(); |
||||
|
|
||||
|
try |
||||
|
{ |
||||
|
Log.Information("Starting AuthServer.Host."); |
||||
|
CreateHostBuilder(args).Build().Run(); |
||||
|
return 0; |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
Log.Fatal(ex, "AuthServer.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,26 @@ |
|||||
|
{ |
||||
|
"iisSettings": { |
||||
|
"windowsAuthentication": false, |
||||
|
"anonymousAuthentication": true, |
||||
|
"iisExpress": { |
||||
|
"applicationUrl": "http://localhost:10100", |
||||
|
"sslPort": 0 |
||||
|
} |
||||
|
}, |
||||
|
"profiles": { |
||||
|
"IIS Express": { |
||||
|
"commandName": "IISExpress", |
||||
|
"launchBrowser": true, |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
} |
||||
|
}, |
||||
|
"AuthServer.Host": { |
||||
|
"commandName": "Project", |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
}, |
||||
|
"applicationUrl": "http://localhost:10100" |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
using Microsoft.AspNetCore.Builder; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Microsoft.Extensions.Logging; |
||||
|
|
||||
|
namespace AuthServer.Host |
||||
|
{ |
||||
|
public class Startup |
||||
|
{ |
||||
|
public void ConfigureServices(IServiceCollection services) |
||||
|
{ |
||||
|
services.AddApplication<AuthServerHostModule>(); |
||||
|
} |
||||
|
|
||||
|
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,20 @@ |
|||||
|
{ |
||||
|
"ConnectionStrings": { |
||||
|
"Default": "Server=124.220.28.250;Database=ABP;User ID=sa;Password=Microsoft2008;" |
||||
|
//"Default": "Server=LAPTOP-V3U07C2O;Database=ABP;user id=sa;Password=1q2w!@#" |
||||
|
}, |
||||
|
"ElasticSearch": { |
||||
|
"Url": "http://localhost:9200" |
||||
|
}, |
||||
|
"CorsOrigins": "http://localhost:9528", |
||||
|
"Redis": { |
||||
|
"Configuration": "127.0.0.1" |
||||
|
}, |
||||
|
"Logging": { |
||||
|
"LogLevel": { |
||||
|
"Default": "Warning" |
||||
|
} |
||||
|
}, |
||||
|
"AllowedHosts": "*", |
||||
|
"Urls": "http://*:8066" |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
"use strict"; |
||||
|
|
||||
|
var gulp = require("gulp"), |
||||
|
path = require('path'), |
||||
|
copyResources = require('./node_modules/@abp/aspnetcore.mvc.ui/gulp/copy-resources.js'); |
||||
|
|
||||
|
exports.default = function(){ |
||||
|
return copyResources(path.resolve('./')); |
||||
|
}; |
@ -0,0 +1,5 @@ |
|||||
|
{ |
||||
|
"version": "1.0", |
||||
|
"defaultProvider": "cdnjs", |
||||
|
"libraries": [] |
||||
|
} |
File diff suppressed because it is too large
@ -0,0 +1,8 @@ |
|||||
|
{ |
||||
|
"version": "0.1.0", |
||||
|
"name": "authserver-host", |
||||
|
"private": true, |
||||
|
"dependencies": { |
||||
|
"@abp/aspnetcore.mvc.ui.theme.basic": "^1.0.2" |
||||
|
} |
||||
|
} |
@ -0,0 +1 @@ |
|||||
|
{"alg":"RS256","d":"bOW5RmPaeT5EMN3Na6cV_KC7Qt5AfYRYKJ-eBe7uANI9USh4plhe8wiOYxhLmZINA4VVDSQMtZmNdo7EP_N92ll4LyD1_DR5lkburjCKh-ARqEl5JZ2OvEQwnzbFEx3-yhm8w86EM1FZ0FwrNv7tsZeTfCiL0zVOA2jOyk85OP4OPHpPnchLJXVbXQGJ3CGgt5q3Csc0zr2m9KodV_2OiPgxrWWILJknnIbQYRD3x2ZMzLp_bAmhZONNhvIMLPB6U5HCxI6v6oufukxIX17Son-wIoGRPwtwwnuTHuRGtRWdaPrMMcSkXeVEIyw3iYqV0O12bL-q39rQm9bCZXdRAQ","dp":"QL1fUIho-Oe6HcF5w5h3-HDoZ5jribSB1BT4dqBwNC9KWnK-uZf8uHuxqMly944iVEnbFHT2VI47IlUOAxD2zP_2F-Qt05ljC0Xly0c-zPr5MfrFW2F7f-8ppCnuyesi_XUF9pDdaWz7N6MRJOo0A_oCIMVxJe1eKCZyQ_EV_D8","dq":"AkvKURAcK1RQ6VXFndcKtqJfizd98FRnfhhchpXRxGz2BuS9cNSVe6NgA4wCnizInSlZXr-jmfNQXE5fT34--rj6wVAnVoAN3rt4NhOkj3__51wBfMvmj4Hpg6eFn_FArGyi9uCN23Bc0jvrK_gykGYoBhAdmoCjPw8ANNUcz_0","e":"AQAB","kid":"5A17250A6F20C147698EDAAC53F4E422","kty":"RSA","n":"rw8cAcpam0hSrqGL6jnhrlv6_8Ihh9352ivY2ecB6EpWObToyKWcAKZjihbMeFl14y34FA0FyZWFH-0UL8W2isvfGXoA_KZQ2J5flH2-cgApC2xREwf26ziLrQ6yGLwxrvk2CbdPLsD8mEBGDFI29fxqOKQEy8MfTRqjfF7d5DjCPoL8kidjab4pkdenHb-2dvNLKuObECWxGzqDkPm79VaLoT8hv5OrVh6NJnQwCzIBHxG-3Cfik2P3WRXSWOAIgmC0foHIAI-iYqPVeOhPwVkoAZK978GeE2XPSTByPttbbwFn7Zj55wwL6WbzaX-u1NfEFyxAg5u0oEkryNuGiQ","p":"yx0uMFsZeGRVgsVUBdxhg5InfhxMjdF_cxlQVAh3X7HwzN9OG1zJ00X90w-yKrw9Qca2EWDjLpbPMbjNGvxbypnXYmBSpY8QPw11A-wS7MTMCYJ5OxfGExPJevnrul1fJRKCtaINCwv7NBm-4Bdxhcp4Z7kjnkht-QWbEgtGIO8","q":"3KPjytutNXv2HAidgh-9ECxcL69axZJThNMwZvrgj6nV54OA9wAeHNmU_cHAQdcBexs519bXTmt4ubTIZS65Cz7dk3wdhictVtZQKHwcNML3gFdnJs72BK6NudHvSGZUtitQJVsdRqbCqfGDVhj5d6MRWWO46ZGMRekzvO3ZYAc","qi":"DgWNZXuKHm6I6B83fg8oj3rFTI4ILGFrd0MBbKrOh-ycTla_Av0ZAsHJuR_yM3SE4nl5baRDrDjlBsW6nuzP5lID6JhR_kOPqziZ8E28UyflG8v2C5pEEKee6CwSqckXPCtq-jnY4ciAiSlHaE48G5We7N86tLzqRmeflDsH980"} |
@ -0,0 +1 @@ |
|||||
|
{"KeyId":"J2XEHsFYdI-u2CG4-DQofQ","Parameters":{"D":"KqHtHWJT08GCMba6s7jrEVO21zbfwtO6aan71VvRC7OuNok65o9UUY9vu1X+NexGRDWIleNY+8qhhSfXGUYhaVTMrAcj7wgjowoaALvZ5rLPODbBJPZ6bcGb6XnnT92eQ3y4PpEtXx2cvUFh3qVD1vDkXnliD7/PudMSBvG5mIZ1DpeleWuIqor2DrwWwYtc4twfincfwioc5Rs/IcYSLP2yPIbZBQ+WOLgfmKHFNXWNKMuc3ibDoIvy0gRfsxGvb24lOPvEosmRmQ9ho9R89aG0lVecRNppDc5kcuOBEEvkAWM/RkCV0UBdEizpZ/A5fixpyCTQST3l55xYNR12XQ==","DP":"bLOeKCdm8ahclUGMIE6Hl6MZEp9SJ5z5+YcMJU+9vCEj+YAx+AjNvXA9Atnubp9kWHCkIS/07HFfWVn9vdfigWKMzwzFinQbh7h6Wq+fk+dth96NjRY4+d4Qqg9Jzbq6X+Ai8xgzveOkDNk8X8M4JXaqGWENqnvz+8v68ekf2Nc=","DQ":"Nof5wutoO2R5vLZi17Z75h4J/uB1pfFmDkYcmJIEyxBEUFtBlQCoq5OeQADU4Jy8uCmBMXOQCgqbzGeBUoZH/cCuGH+awhlfOJLW3CYo00bHnYXA3KmbUHiTVBlKBAFL1O6w2K4f48mhWwFstZ2qmSVfrkOXYRHu0Wz5BJbvdds=","Exponent":"AQAB","InverseQ":"S+P+p0YYFXQiadN8/X/s6yJNUOKWwAUy2Q90mnFfuDGdWvEGUifqgAYR6P/IDKrP/a/+8h5uSvdTHFICM/v+wlisoS+STKTdKhIWHHQ9h371mNAQLQmPWoNs4WiVzOKvUsjNnqOnJT5zBuSWOJe6mV9OW/mGnJ1RMlETgFCGZmw=","Modulus":"p8IFbj7yTlG1zwr/GZ4CGB0Fxz8sZsqyqQ2/xVb9RaAVzI+VwQt+1nrVDPQMyYSjHzcGL36fUe+DECzysNA5DEjToyhg3oIbvzk9ybVO0HgbGViSYwM732ohR2zSXFTBoIguSSfquzshC4uZYp7w7KjSYp1vgGPXI5CXKAGbWyvONBmIWbfD4i74UmwLOZEQHuwKnPZ3DmuQaFr9+dB8IijGSbiPL9AYvFdamfDYnU2i1Th+gKlHurmWBKF3NllXWQPmyENiigULGDZX1PZHmUyLt7Ba1HxF0YYYYvlY9kjTahjcwFQIURayG5pajDZNP0lIJ7HitaoCXkc1agjj8Q==","P":"0hdR1/vTZ6S6GF8Dy94GpRmqoHZqAPHXYwk7EDkolAZAeoQ4UmcBWmvux63uJEwXpOYOZ0OrBkal00VllDBKPMhK9vW+mW+PgmeU0b5KRQLXiUpaEHD88W321fDTASEACtR7kPvoKLPv6Gy5RnFCOQ0QqY7arcJWl5x00mxpIr8=","Q":"zGqLlpbHclOgfOAlOTMVQWiQ3CV+RU4XCv/LCEg8/QsEVCkWN4dtKl2nHNj15ykBMwEPOlVUrGnsc7n5YcOe47SO31PZMTdiPNs5QM8uOBN87A/ZYN5z+NpKt6iziiULO//KsOYxbsuFtnIuK1kiQurLcRNeAHVgAOAhDpkilU8="}} |
After Width: | Height: | Size: 23 KiB |
File diff suppressed because it is too large
@ -0,0 +1,25 @@ |
|||||
|
|
||||
|
Microsoft Visual Studio Solution File, Format Version 12.00 |
||||
|
# Visual Studio Version 16 |
||||
|
VisualStudioVersion = 16.0.29326.143 |
||||
|
MinimumVisualStudioVersion = 10.0.40219.1 |
||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AuthServer", "./AuthServer.Host/AuthServer.Host.csproj", "{21789B5F-E84A-407E-8DAA-5F268E5F8647}" |
||||
|
EndProject |
||||
|
Global |
||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
||||
|
Debug|Any CPU = Debug|Any CPU |
||||
|
Release|Any CPU = Release|Any CPU |
||||
|
EndGlobalSection |
||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
||||
|
{21789B5F-E84A-407E-8DAA-5F268E5F8647}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
||||
|
{21789B5F-E84A-407E-8DAA-5F268E5F8647}.Debug|Any CPU.Build.0 = Debug|Any CPU |
||||
|
{21789B5F-E84A-407E-8DAA-5F268E5F8647}.Release|Any CPU.ActiveCfg = Release|Any CPU |
||||
|
{21789B5F-E84A-407E-8DAA-5F268E5F8647}.Release|Any CPU.Build.0 = Release|Any CPU |
||||
|
EndGlobalSection |
||||
|
GlobalSection(SolutionProperties) = preSolution |
||||
|
HideSolutionNode = FALSE |
||||
|
EndGlobalSection |
||||
|
GlobalSection(ExtensibilityGlobals) = postSolution |
||||
|
SolutionGuid = {7585D0E2-0A6D-4F73-8EFF-433646754357} |
||||
|
EndGlobalSection |
||||
|
EndGlobal |
@ -0,0 +1,2 @@ |
|||||
|
#SmartFactorySuite |
||||
|
##Authorization Server |
@ -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,26 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk.Web"> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<TargetFramework>netcoreapp5</TargetFramework> |
||||
|
<RootNamespace>InternalGateway</RootNamespace> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" /> |
||||
|
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="5.0.5" /> |
||||
|
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.1" /> |
||||
|
<PackageReference Include="Ocelot" Version="17.0.0" /> |
||||
|
<PackageReference Include="Serilog.AspNetCore" Version="4.1.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="Swashbuckle.AspNetCore" Version="6.1.2" /> |
||||
|
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="4.2.2" /> |
||||
|
<PackageReference Include="Volo.Abp.Autofac" Version="4.2.2" /> |
||||
|
<PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="4.2.2" /> |
||||
|
<PackageReference Include="Volo.Abp.Identity.HttpApi" Version="4.2.2" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
<ProjectExtensions><VisualStudio><UserProperties appsettings_1json__JsonSchema="" /></VisualStudio></ProjectExtensions> |
||||
|
|
||||
|
</Project> |
@ -0,0 +1,143 @@ |
|||||
|
using Microsoft.AspNetCore.Builder; |
||||
|
using Microsoft.AspNetCore.DataProtection; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.Extensions.Configuration; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Microsoft.Extensions.Hosting; |
||||
|
using Microsoft.OpenApi.Models; |
||||
|
using Ocelot.DependencyInjection; |
||||
|
using Ocelot.Middleware; |
||||
|
using StackExchange.Redis; |
||||
|
using System; |
||||
|
using System.Collections.Generic; |
||||
|
using System.Linq; |
||||
|
using System.Security.Claims; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.AspNetCore.Serilog; |
||||
|
using Volo.Abp.Autofac; |
||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Volo.Abp.EntityFrameworkCore.SqlServer; |
||||
|
using Volo.Abp.Identity; |
||||
|
using Volo.Abp.Modularity; |
||||
|
using Volo.Abp.Security.Claims; |
||||
|
|
||||
|
namespace InternalGateway |
||||
|
{ |
||||
|
[DependsOn( |
||||
|
typeof(AbpAutofacModule), |
||||
|
typeof(AbpIdentityHttpApiModule), |
||||
|
typeof(AbpEntityFrameworkCoreSqlServerModule), |
||||
|
typeof(AbpAspNetCoreSerilogModule) |
||||
|
)] |
||||
|
public class InternalGatewayHostModule : AbpModule |
||||
|
{ |
||||
|
public override void ConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
var configuration = context.Services.GetConfiguration(); |
||||
|
var hostingEnvironment = context.Services.GetHostingEnvironment(); |
||||
|
|
||||
|
ConfigureAuthentication(context, configuration); |
||||
|
//ConfigureSql();
|
||||
|
//ConfigureRedis(context, configuration, hostingEnvironment);
|
||||
|
ConfigureSwaggerServices(context); |
||||
|
context.Services.AddOcelot(context.Services.GetConfiguration()); |
||||
|
} |
||||
|
|
||||
|
public override void OnApplicationInitialization(ApplicationInitializationContext context) |
||||
|
{ |
||||
|
var app = context.GetApplicationBuilder(); |
||||
|
|
||||
|
app.UseCorrelationId(); |
||||
|
app.UseRouting(); |
||||
|
app.UseAuthentication(); |
||||
|
//app.UseMultiTenancy();
|
||||
|
//app.UseAuthorization();
|
||||
|
|
||||
|
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 }, |
||||
|
{ "tenantid", AbpClaimTypes.TenantId } |
||||
|
}; |
||||
|
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.UseSwagger(); |
||||
|
app.UseSwaggerUI(options => |
||||
|
{ |
||||
|
options.SwaggerEndpoint("/swagger/v1/swagger.json", "Business Service API"); |
||||
|
}); |
||||
|
|
||||
|
app.MapWhen( |
||||
|
ctx => ctx.Request.Path.ToString().StartsWith("/api/abp/") || |
||||
|
ctx.Request.Path.ToString().StartsWith("/Abp/"), |
||||
|
app2 => |
||||
|
{ |
||||
|
app2.UseRouting(); |
||||
|
app2.UseConfiguredEndpoints(); |
||||
|
} |
||||
|
); |
||||
|
|
||||
|
app.UseOcelot().Wait(); |
||||
|
app.UseAbpSerilogEnrichers(); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) |
||||
|
{ |
||||
|
context.Services.AddAuthentication("Bearer") |
||||
|
.AddIdentityServerAuthentication(options => |
||||
|
{ |
||||
|
options.Authority = configuration["AuthServer:Authority"]; |
||||
|
options.RequireHttpsMetadata = false; |
||||
|
options.ApiName = "InternalGateway"; |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
private void ConfigureSql() |
||||
|
{ |
||||
|
Configure<AbpDbContextOptions>(options => |
||||
|
{ |
||||
|
options.UseSqlServer(); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureRedis( |
||||
|
ServiceConfigurationContext context, |
||||
|
IConfiguration configuration, |
||||
|
IWebHostEnvironment hostingEnvironment) |
||||
|
{ |
||||
|
context.Services.AddStackExchangeRedisCache(options => |
||||
|
{ |
||||
|
options.Configuration = configuration["Redis:Configuration"]; |
||||
|
}); |
||||
|
|
||||
|
if (!hostingEnvironment.IsDevelopment()) |
||||
|
{ |
||||
|
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); |
||||
|
context.Services |
||||
|
.AddDataProtection() |
||||
|
.PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys"); |
||||
|
} |
||||
|
} |
||||
|
*/ |
||||
|
|
||||
|
private static void ConfigureSwaggerServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
context.Services.AddSwaggerGen( |
||||
|
options => |
||||
|
{ |
||||
|
options.SwaggerDoc("v1", new OpenApiInfo { Title = "InternalGateway Service API", Version = "v1" }); |
||||
|
options.DocInclusionPredicate((docName, description) => true); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,66 @@ |
|||||
|
using System; |
||||
|
using System.IO; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.Extensions.Configuration; |
||||
|
using Microsoft.Extensions.Hosting; |
||||
|
using Serilog; |
||||
|
using Serilog.Events; |
||||
|
|
||||
|
namespace InternalGateway |
||||
|
{ |
||||
|
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() |
||||
|
#if DEBUG
|
||||
|
.MinimumLevel.Debug() |
||||
|
#else
|
||||
|
.MinimumLevel.Information() |
||||
|
#endif
|
||||
|
.MinimumLevel.Override("Microsoft", LogEventLevel.Information) |
||||
|
.Enrich.FromLogContext() |
||||
|
.WriteTo.Async(c => c.File("Logs/logs.txt")) |
||||
|
// .WriteTo.Elasticsearch(
|
||||
|
// new ElasticsearchSinkOptions(new Uri(configuration["ElasticSearch:Url"]))
|
||||
|
// {
|
||||
|
// AutoRegisterTemplate = true,
|
||||
|
// AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv6,
|
||||
|
// IndexFormat = "msdemo-log-{0:yyyy.MM}"
|
||||
|
// })
|
||||
|
.WriteTo.Console() |
||||
|
.CreateLogger(); |
||||
|
|
||||
|
try |
||||
|
{ |
||||
|
Log.Information("Starting Business.Host"); |
||||
|
CreateHostBuilder(args).Build().Run(); |
||||
|
return 0; |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
Log.Fatal(ex, "Host terminated unexpectedly!"); |
||||
|
return 1; |
||||
|
} |
||||
|
finally |
||||
|
{ |
||||
|
Log.CloseAndFlush(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
internal static IHostBuilder CreateHostBuilder(string[] args) => |
||||
|
Host.CreateDefaultBuilder(args) |
||||
|
.ConfigureWebHostDefaults(webBuilder => |
||||
|
{ |
||||
|
webBuilder.UseStartup<Startup>(); |
||||
|
}) |
||||
|
.UseAutofac() |
||||
|
.UseSerilog(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,27 @@ |
|||||
|
{ |
||||
|
"iisSettings": { |
||||
|
"windowsAuthentication": false, |
||||
|
"anonymousAuthentication": true, |
||||
|
"iisExpress": { |
||||
|
"applicationUrl": "http://localhost:58315/", |
||||
|
"sslPort": 44383 |
||||
|
} |
||||
|
}, |
||||
|
"profiles": { |
||||
|
"IIS Express": { |
||||
|
"commandName": "IISExpress", |
||||
|
"launchBrowser": true, |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
} |
||||
|
}, |
||||
|
"InternalGateway.Host": { |
||||
|
"commandName": "Project", |
||||
|
"launchBrowser": true, |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
}, |
||||
|
"applicationUrl": "http://localhost:10110" |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,19 @@ |
|||||
|
using Microsoft.AspNetCore.Builder; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
|
||||
|
namespace InternalGateway |
||||
|
{ |
||||
|
public class Startup |
||||
|
{ |
||||
|
public void ConfigureServices(IServiceCollection services) |
||||
|
{ |
||||
|
services.AddApplication<InternalGatewayHostModule>(); |
||||
|
} |
||||
|
|
||||
|
public void Configure(IApplicationBuilder app, IWebHostEnvironment env) |
||||
|
{ |
||||
|
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": "InternalGateway" |
||||
|
}, |
||||
|
"ConnectionStrings": { |
||||
|
"Default": "Server=124.220.28.250;Database=ABP;User ID=sa;Password=Microsoft2008;" |
||||
|
}, |
||||
|
"ElasticSearch": { |
||||
|
"Url": "http://localhost:9200" |
||||
|
}, |
||||
|
"Redis": { |
||||
|
"Configuration": "127.0.0.1" |
||||
|
}, |
||||
|
"ReRoutes": [ |
||||
|
{ |
||||
|
"DownstreamPathTemplate": "/api/identity/{everything}", |
||||
|
"DownstreamScheme": "http", |
||||
|
"DownstreamHostAndPorts": [ |
||||
|
{ |
||||
|
"Host": "localhost", |
||||
|
"Port": 10130 |
||||
|
} |
||||
|
], |
||||
|
"UpstreamPathTemplate": "/api/identity/{everything}", |
||||
|
"UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ] |
||||
|
} |
||||
|
], |
||||
|
"GlobalConfiguration": { |
||||
|
"BaseUrl": "http://localhost:10110" |
||||
|
}, |
||||
|
"Logging": { |
||||
|
"LogLevel": { |
||||
|
"Default": "Warning" |
||||
|
} |
||||
|
}, |
||||
|
"AllowedHosts": "*", |
||||
|
"Urls": "http://*:8091" |
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
|
||||
|
Microsoft Visual Studio Solution File, Format Version 12.00 |
||||
|
# Visual Studio Version 16 |
||||
|
VisualStudioVersion = 16.0.30002.166 |
||||
|
MinimumVisualStudioVersion = 10.0.40219.1 |
||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InternalGateway.Host", "InternalGateway.Host\InternalGateway.Host.csproj", "{C48F9300-FF79-4E66-9783-7E622FD0945A}" |
||||
|
EndProject |
||||
|
Global |
||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
||||
|
Debug|Any CPU = Debug|Any CPU |
||||
|
Release|Any CPU = Release|Any CPU |
||||
|
EndGlobalSection |
||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
||||
|
{C48F9300-FF79-4E66-9783-7E622FD0945A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
||||
|
{C48F9300-FF79-4E66-9783-7E622FD0945A}.Debug|Any CPU.Build.0 = Debug|Any CPU |
||||
|
{C48F9300-FF79-4E66-9783-7E622FD0945A}.Release|Any CPU.ActiveCfg = Release|Any CPU |
||||
|
{C48F9300-FF79-4E66-9783-7E622FD0945A}.Release|Any CPU.Build.0 = Release|Any CPU |
||||
|
EndGlobalSection |
||||
|
GlobalSection(SolutionProperties) = preSolution |
||||
|
HideSolutionNode = FALSE |
||||
|
EndGlobalSection |
||||
|
GlobalSection(ExtensibilityGlobals) = postSolution |
||||
|
SolutionGuid = {343C6B22-83EC-4A39-A731-1DD795BE7EF8} |
||||
|
EndGlobalSection |
||||
|
EndGlobal |
@ -0,0 +1,3 @@ |
|||||
|
#SmartFactorySuite |
||||
|
##Internal Gateway |
||||
|
##WebApp Gateway |
@ -0,0 +1,12 @@ |
|||||
|
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build |
||||
|
WORKDIR /app |
||||
|
|
||||
|
WORKDIR /src |
||||
|
COPY . . |
||||
|
RUN dotnet restore |
||||
|
RUN dotnet publish -c Release -o publish |
||||
|
|
||||
|
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 |
||||
|
WORKDIR /app |
||||
|
COPY --from=build /src/publish ./ |
||||
|
ENTRYPOINT ["dotnet", "WebAppGateway.Host.dll"] |
@ -0,0 +1,66 @@ |
|||||
|
using System; |
||||
|
using System.IO; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.Extensions.Configuration; |
||||
|
using Microsoft.Extensions.Hosting; |
||||
|
using Serilog; |
||||
|
using Serilog.Events; |
||||
|
|
||||
|
namespace WebAppGateway |
||||
|
{ |
||||
|
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() |
||||
|
#if DEBUG
|
||||
|
.MinimumLevel.Debug() |
||||
|
#else
|
||||
|
.MinimumLevel.Information() |
||||
|
#endif
|
||||
|
.MinimumLevel.Override("Microsoft", LogEventLevel.Information) |
||||
|
.Enrich.FromLogContext() |
||||
|
.WriteTo.Async(c => c.File("Logs/logs.txt")) |
||||
|
// .WriteTo.Elasticsearch(
|
||||
|
// new ElasticsearchSinkOptions(new Uri(configuration["ElasticSearch:Url"]))
|
||||
|
// {
|
||||
|
// AutoRegisterTemplate = true,
|
||||
|
// AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv6,
|
||||
|
// IndexFormat = "msdemo-log-{0:yyyy.MM}"
|
||||
|
// })
|
||||
|
.WriteTo.Console() |
||||
|
.CreateLogger(); |
||||
|
|
||||
|
try |
||||
|
{ |
||||
|
Log.Information("Starting Business.Host"); |
||||
|
CreateHostBuilder(args).Build().Run(); |
||||
|
return 0; |
||||
|
} |
||||
|
catch (Exception ex) |
||||
|
{ |
||||
|
Log.Fatal(ex, "Host terminated unexpectedly!"); |
||||
|
return 1; |
||||
|
} |
||||
|
finally |
||||
|
{ |
||||
|
Log.CloseAndFlush(); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
internal static IHostBuilder CreateHostBuilder(string[] args) => |
||||
|
Host.CreateDefaultBuilder(args) |
||||
|
.ConfigureWebHostDefaults(webBuilder => |
||||
|
{ |
||||
|
webBuilder.UseStartup<Startup>(); |
||||
|
}) |
||||
|
.UseAutofac() |
||||
|
.UseSerilog(); |
||||
|
} |
||||
|
} |
@ -0,0 +1,27 @@ |
|||||
|
{ |
||||
|
"iisSettings": { |
||||
|
"windowsAuthentication": false, |
||||
|
"anonymousAuthentication": true, |
||||
|
"iisExpress": { |
||||
|
"applicationUrl": "http://localhost:63356/", |
||||
|
"sslPort": 44393 |
||||
|
} |
||||
|
}, |
||||
|
"profiles": { |
||||
|
"IIS Express": { |
||||
|
"commandName": "IISExpress", |
||||
|
"launchBrowser": true, |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
} |
||||
|
}, |
||||
|
"WebAppGateway.Host": { |
||||
|
"commandName": "Project", |
||||
|
"launchBrowser": true, |
||||
|
"environmentVariables": { |
||||
|
"ASPNETCORE_ENVIRONMENT": "Development" |
||||
|
}, |
||||
|
"applicationUrl": "http://localhost:10120" |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,20 @@ |
|||||
|
using Microsoft.AspNetCore.Builder; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Microsoft.Extensions.Logging; |
||||
|
|
||||
|
namespace WebAppGateway |
||||
|
{ |
||||
|
public class Startup |
||||
|
{ |
||||
|
public void ConfigureServices(IServiceCollection services) |
||||
|
{ |
||||
|
services.AddApplication<WebAppGatewayHostModule>(); |
||||
|
} |
||||
|
|
||||
|
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) |
||||
|
{ |
||||
|
app.InitializeApplication(); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,35 @@ |
|||||
|
<Project Sdk="Microsoft.NET.Sdk.Web"> |
||||
|
|
||||
|
<PropertyGroup> |
||||
|
<TargetFramework>netcoreapp5</TargetFramework> |
||||
|
<RootNamespace>WebAppGateway</RootNamespace> |
||||
|
</PropertyGroup> |
||||
|
|
||||
|
<ItemGroup> |
||||
|
<PackageReference Include="IdentityServer4.AccessTokenValidation" Version="3.0.1" /> |
||||
|
<PackageReference Include="Microsoft.AspNetCore.DataProtection.StackExchangeRedis" Version="5.0.0" /> |
||||
|
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.0" /> |
||||
|
<PackageReference Include="Ocelot" Version="15.0.7" /> |
||||
|
<PackageReference Include="Serilog.AspNetCore" Version="3.4.0" /> |
||||
|
<PackageReference Include="Serilog.Sinks.Async" Version="1.4.0" /> |
||||
|
<!-- <PackageReference Include="Serilog.Sinks.Elasticsearch" Version="8.2.0" /> --> |
||||
|
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" /> |
||||
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="5.5.1" /> |
||||
|
<PackageReference Include="Volo.Abp.AspNetCore.MultiTenancy" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.Autofac" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.EntityFrameworkCore.SqlServer" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.Http.Client.IdentityModel" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.Identity.HttpApi" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.Identity.HttpApi.Client" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.PermissionManagement.Application" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.PermissionManagement.Domain.Identity" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.PermissionManagement.Domain.IdentityServer" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.PermissionManagement.EntityFrameworkCore" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.PermissionManagement.HttpApi" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.SettingManagement.EntityFrameworkCore" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.TenantManagement.EntityFrameworkCore" Version="4.0.0" /> |
||||
|
<PackageReference Include="Volo.Abp.TenantManagement.HttpApi" Version="4.0.0" /> |
||||
|
</ItemGroup> |
||||
|
|
||||
|
</Project> |
@ -0,0 +1,155 @@ |
|||||
|
using Microsoft.AspNetCore.Builder; |
||||
|
using Microsoft.AspNetCore.Cors; |
||||
|
using Microsoft.AspNetCore.DataProtection; |
||||
|
using Microsoft.AspNetCore.Hosting; |
||||
|
using Microsoft.Extensions.Configuration; |
||||
|
using Microsoft.Extensions.DependencyInjection; |
||||
|
using Microsoft.Extensions.Hosting; |
||||
|
using Microsoft.OpenApi.Models; |
||||
|
using Ocelot.DependencyInjection; |
||||
|
using Ocelot.Middleware; |
||||
|
using StackExchange.Redis; |
||||
|
using System; |
||||
|
using System.Linq; |
||||
|
using Volo.Abp; |
||||
|
using Volo.Abp.AspNetCore.Serilog; |
||||
|
using Volo.Abp.Autofac; |
||||
|
using Volo.Abp.EntityFrameworkCore; |
||||
|
using Volo.Abp.Localization; |
||||
|
using Volo.Abp.Modularity; |
||||
|
|
||||
|
namespace WebAppGateway |
||||
|
{ |
||||
|
[DependsOn( |
||||
|
typeof(AbpAutofacModule), |
||||
|
typeof(AbpAspNetCoreSerilogModule) |
||||
|
)] |
||||
|
public class WebAppGatewayHostModule: AbpModule |
||||
|
{ |
||||
|
private const string DefaultCorsPolicyName = "Default"; |
||||
|
|
||||
|
public override void ConfigureServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
var configuration = context.Services.GetConfiguration(); |
||||
|
var hostingEnvironment = context.Services.GetHostingEnvironment(); |
||||
|
|
||||
|
ConfigureAuthentication(context, configuration); |
||||
|
//ConfigureSql();
|
||||
|
//ConfigureRedis(context, configuration, hostingEnvironment);
|
||||
|
ConfigureCors(context, configuration); |
||||
|
//ConfigureSwaggerServices(context);
|
||||
|
ConfigureLocalization(); |
||||
|
context.Services.AddOcelot(context.Services.GetConfiguration()); |
||||
|
} |
||||
|
|
||||
|
public override void OnApplicationInitialization(ApplicationInitializationContext context) |
||||
|
{ |
||||
|
var app = context.GetApplicationBuilder(); |
||||
|
|
||||
|
app.UseCorrelationId(); |
||||
|
app.UseVirtualFiles(); |
||||
|
app.UseRouting(); |
||||
|
app.UseCors(DefaultCorsPolicyName); |
||||
|
app.UseAuthentication(); |
||||
|
app.UseAbpClaimsMap(); |
||||
|
app.UseAuthorization(); |
||||
|
|
||||
|
//app.UseSwagger();
|
||||
|
//app.UseSwaggerUI(options =>
|
||||
|
//{
|
||||
|
// options.SwaggerEndpoint("/swagger/v1/swagger.json", "Business Service API");
|
||||
|
//});
|
||||
|
|
||||
|
app.UseOcelot().Wait(); |
||||
|
app.UseAbpSerilogEnrichers(); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) |
||||
|
{ |
||||
|
context.Services.AddAuthentication("Bearer") |
||||
|
.AddIdentityServerAuthentication(options => |
||||
|
{ |
||||
|
options.Authority = configuration["AuthServer:Authority"]; |
||||
|
options.RequireHttpsMetadata = false; |
||||
|
options.ApiName = "WebAppGateway"; |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
private static void ConfigureSwaggerServices(ServiceConfigurationContext context) |
||||
|
{ |
||||
|
context.Services.AddSwaggerGen( |
||||
|
options => |
||||
|
{ |
||||
|
options.SwaggerDoc("v1", new OpenApiInfo { Title = "WebAppGateway Service API", Version = "v1" }); |
||||
|
options.DocInclusionPredicate((docName, description) => true); |
||||
|
}); |
||||
|
} |
||||
|
*/ |
||||
|
|
||||
|
private void ConfigureLocalization() |
||||
|
{ |
||||
|
Configure<AbpLocalizationOptions>(options => |
||||
|
{ |
||||
|
options.Languages.Add(new LanguageInfo("cs", "cs", "Čeština")); |
||||
|
options.Languages.Add(new LanguageInfo("en", "en", "English")); |
||||
|
options.Languages.Add(new LanguageInfo("pt-BR", "pt-BR", "Português")); |
||||
|
options.Languages.Add(new LanguageInfo("ru", "ru", "Русский")); |
||||
|
options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe")); |
||||
|
options.Languages.Add(new LanguageInfo("zh-Hans", "zh-Hans", "简体中文")); |
||||
|
options.Languages.Add(new LanguageInfo("zh-Hant", "zh-Hant", "繁體中文")); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
/* |
||||
|
private void ConfigureSql() |
||||
|
{ |
||||
|
Configure<AbpDbContextOptions>(options => |
||||
|
{ |
||||
|
options.UseSqlServer(); |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
private void ConfigureRedis( |
||||
|
ServiceConfigurationContext context, |
||||
|
IConfiguration configuration, |
||||
|
IWebHostEnvironment hostingEnvironment) |
||||
|
{ |
||||
|
context.Services.AddStackExchangeRedisCache(options => |
||||
|
{ |
||||
|
options.Configuration = configuration["Redis:Configuration"]; |
||||
|
}); |
||||
|
|
||||
|
if (!hostingEnvironment.IsDevelopment()) |
||||
|
{ |
||||
|
var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); |
||||
|
context.Services |
||||
|
.AddDataProtection() |
||||
|
.PersistKeysToStackExchangeRedis(redis, "DataProtection-Keys"); |
||||
|
} |
||||
|
} |
||||
|
*/ |
||||
|
|
||||
|
private void ConfigureCors(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(); |
||||
|
}); |
||||
|
}); |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,9 @@ |
|||||
|
{ |
||||
|
"Logging": { |
||||
|
"LogLevel": { |
||||
|
"Default": "Information", |
||||
|
"Microsoft": "Warning", |
||||
|
"Microsoft.Hosting.Lifetime": "Information" |
||||
|
} |
||||
|
} |
||||
|
} |
@ -0,0 +1,122 @@ |
|||||
|
{ |
||||
|
"RemoteServices": { |
||||
|
"Default": { |
||||
|
"BaseUrl": "http://localhost:10120/" |
||||
|
} |
||||
|
}, |
||||
|
"App": { |
||||
|
"CorsOrigins": "http://localhost:10000/" |
||||
|
}, |
||||
|
"ConnectionStrings": { |
||||
|
"Default": "Server=124.220.28.250;Database=ABP;User ID=sa;Password=Microsoft2008;" |
||||
|
}, |
||||
|
"Redis": { |
||||
|
"Configuration": "192.168.1.191" |
||||
|
}, |
||||
|
"ElasticSearch": { |
||||
|
"Url": "http://localhost:9200" |
||||
|
}, |
||||
|
"AuthServer": { |
||||
|
"Authority": "http://localhost:10100" |
||||
|
}, |
||||
|
"ReRoutes": [ |
||||
|
{ |
||||
|
"DownstreamPathTemplate": "/api/abp/{everything}", |
||||
|
"DownstreamScheme": "http", |
||||
|
"DownstreamHostAndPorts": [ |
||||
|
{ |
||||
|
"Host": "localhost", |
||||
|
"Port": 10130 |
||||
|
} |
||||
|
], |
||||
|
"UpstreamPathTemplate": "/api/abp/{everything}", |
||||
|
"UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ] |
||||
|
}, |
||||
|
{ |
||||
|
"DownstreamPathTemplate": "/api/identity/{everything}", |
||||
|
"DownstreamScheme": "http", |
||||
|
"DownstreamHostAndPorts": [ |
||||
|
{ |
||||
|
"Host": "localhost", |
||||
|
"Port": 10130 |
||||
|
} |
||||
|
], |
||||
|
"UpstreamPathTemplate": "/api/identity/{everything}", |
||||
|
"UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ] |
||||
|
}, |
||||
|
{ |
||||
|
"DownstreamPathTemplate": "/api/base/{everything}", |
||||
|
"DownstreamScheme": "http", |
||||
|
"DownstreamHostAndPorts": [ |
||||
|
{ |
||||
|
"Host": "localhost", |
||||
|
"Port": 10130 |
||||
|
} |
||||
|
], |
||||
|
"UpstreamPathTemplate": "/api/base/{everything}", |
||||
|
"UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ] |
||||
|
}, |
||||
|
{ |
||||
|
"DownstreamPathTemplate": "/api/multi-tenancy/{everything}", |
||||
|
"DownstreamScheme": "http", |
||||
|
"DownstreamHostAndPorts": [ |
||||
|
{ |
||||
|
"Host": "localhost", |
||||
|
"Port": 10130 |
||||
|
} |
||||
|
], |
||||
|
"UpstreamPathTemplate": "/api/multi-tenancy/{everything}", |
||||
|
"UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ] |
||||
|
}, |
||||
|
{ |
||||
|
"DownstreamPathTemplate": "/api/permission-management/permissions", |
||||
|
"DownstreamScheme": "http", |
||||
|
"DownstreamHostAndPorts": [ |
||||
|
{ |
||||
|
"Host": "localhost", |
||||
|
"Port": 10130 |
||||
|
} |
||||
|
], |
||||
|
"UpstreamPathTemplate": "/api/permission-management/permissions", |
||||
|
"UpstreamHttpMethod": [ "Put", "Get" ] |
||||
|
}, |
||||
|
{ |
||||
|
"DownstreamPathTemplate": "/api/MasterDataService/{everything}", |
||||
|
"DownstreamScheme": "http", |
||||
|
"DownstreamHostAndPorts": [ |
||||
|
{ |
||||
|
"Host": "localhost", |
||||
|
"Port": 10200 |
||||
|
} |
||||
|
], |
||||
|
"UpstreamPathTemplate": "/api/MasterDataService/{everything}", |
||||
|
"UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ] |
||||
|
}, |
||||
|
{ |
||||
|
"DownstreamPathTemplate": "/api/getBlobFiles/{everything}", |
||||
|
"DownstreamScheme": "http", |
||||
|
"DownstreamHostAndPorts": [ |
||||
|
{ |
||||
|
"Host": "localhost", |
||||
|
"Port": 10600 |
||||
|
} |
||||
|
], |
||||
|
"UpstreamPathTemplate": "/api/getBlobFiles/{everything}", |
||||
|
"UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ] |
||||
|
}, |
||||
|
{ |
||||
|
"DownstreamPathTemplate": "/api/getBlobFiles/{everything}", |
||||
|
"DownstreamScheme": "http", |
||||
|
"DownstreamHostAndPorts": [ |
||||
|
{ |
||||
|
"Host": "http://114.116.225.148/", |
||||
|
"Port": 8088 |
||||
|
} |
||||
|
], |
||||
|
"UpstreamPathTemplate": "/api/getBlobFiles/{everything}", |
||||
|
"UpstreamHttpMethod": [ "Put", "Delete", "Get", "Post" ] |
||||
|
} |
||||
|
|
||||
|
], |
||||
|
"Urls": "http://*:8092" |
||||
|
} |
@ -0,0 +1,25 @@ |
|||||
|
|
||||
|
Microsoft Visual Studio Solution File, Format Version 12.00 |
||||
|
# Visual Studio Version 16 |
||||
|
VisualStudioVersion = 16.0.30002.166 |
||||
|
MinimumVisualStudioVersion = 10.0.40219.1 |
||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebAppGateway.Host", "WebAppGateway.Host\WebAppGateway.Host.csproj", "{C27EC872-685A-43E2-8E8E-1C4B05B0B004}" |
||||
|
EndProject |
||||
|
Global |
||||
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution |
||||
|
Debug|Any CPU = Debug|Any CPU |
||||
|
Release|Any CPU = Release|Any CPU |
||||
|
EndGlobalSection |
||||
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution |
||||
|
{C27EC872-685A-43E2-8E8E-1C4B05B0B004}.Debug|Any CPU.ActiveCfg = Debug|Any CPU |
||||
|
{C27EC872-685A-43E2-8E8E-1C4B05B0B004}.Debug|Any CPU.Build.0 = Debug|Any CPU |
||||
|
{C27EC872-685A-43E2-8E8E-1C4B05B0B004}.Release|Any CPU.ActiveCfg = Release|Any CPU |
||||
|
{C27EC872-685A-43E2-8E8E-1C4B05B0B004}.Release|Any CPU.Build.0 = Release|Any CPU |
||||
|
EndGlobalSection |
||||
|
GlobalSection(SolutionProperties) = preSolution |
||||
|
HideSolutionNode = FALSE |
||||
|
EndGlobalSection |
||||
|
GlobalSection(ExtensibilityGlobals) = postSolution |
||||
|
SolutionGuid = {993A20BD-5184-407D-8874-270FC037FC57} |
||||
|
EndGlobalSection |
||||
|
EndGlobal |
@ -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; |
||||
|
} |
||||
|
} |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue