From 5fb09c1c4af7d9fb980e9ad68986646a639f05c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=88=E6=B7=B3?= Date: Tue, 31 Jan 2023 18:08:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/Yi.Framework.Template/Program.cs | 2 +- .../src/project/Template/GlobalUsings.cs | 3 +- .../src/project/rbac/GlobalUsings.cs | 3 +- .../ApplicationContractsSwaggerDoc.xml | 50 +- .../Identity/Dtos/Dept/DeptCreateInputVo.cs | 24 + .../Identity/Dtos/Dept/DeptGetListInputVo.cs | 22 + .../Dtos/Dept/DeptGetListOutputDto.cs | 22 + .../Identity/Dtos/Dept/DeptGetOutputDto.cs | 22 + .../Identity/Dtos/Dept/DeptUpdateInputVo.cs | 21 + .../Identity/Dtos/Menu/MenuCreateInputVo.cs | 32 ++ .../Identity/Dtos/Menu/MenuGetListInputVo.cs | 30 ++ .../Dtos/Menu/MenuGetListOutputDto.cs | 31 ++ .../Identity/Dtos/Menu/MenuGetOutputDto.cs | 31 ++ .../Identity/Dtos/Menu/MenuUpdateInputVo.cs | 30 ++ .../Identity/Dtos/Post/PostCreateInputVo.cs | 22 + .../Identity/Dtos/Post/PostGetListInputVo.cs | 20 + .../Dtos/Post/PostGetListOutputDto.cs | 20 + .../Identity/Dtos/Post/PostGetOutputDto.cs | 20 + .../Identity/Dtos/Post/PostUpdateInputVo.cs | 19 + .../Identity/Dtos/Role/RoleCreateInputVo.cs | 24 + .../Identity/Dtos/Role/RoleGetListInputVo.cs | 22 + .../Dtos/Role/RoleGetListOutputDto.cs | 22 + .../Identity/Dtos/Role/RoleGetOutputDto.cs | 22 + .../Identity/Dtos/Role/RoleUpdateInputVo.cs | 21 + .../Identity/Dtos/User/UserCreateInputVo.cs | 7 +- .../Identity/Dtos/User/UserUpdateInputVo.cs | 2 + .../Identity/IDeptService.cs | 18 + .../Identity/IMenuService.cs | 18 + .../Identity/IPostService.cs | 18 + .../Identity/IRoleService.cs | 18 + .../Dtos/Student/StudentGetOutputDto.cs | 17 - .../School/Dtos/StudentCreateInputVo.cs | 19 - .../School/Dtos/StudentGetListInputVo.cs | 17 - .../School/Dtos/StudentGetListOutputDto.cs | 17 - .../School/Dtos/StudentUpdateInputVo.cs | 16 - .../School/IStudentService.cs | 18 - .../ApplicationSwaggerDoc.xml | 27 +- .../Identity/AccountService.cs | 14 +- .../Identity/DeptService.cs | 17 + .../Identity/MapperConfig/DeptProfile.cs | 23 + .../Identity/MapperConfig/MenuProfile.cs | 23 + .../Identity/MapperConfig/PostProfile.cs | 23 + .../Identity/MapperConfig/RoleProfile.cs | 23 + .../Identity/MenuService.cs | 17 + .../Identity/PostService.cs | 17 + .../Identity/RoleService.cs | 17 + .../Identity/UserService.cs | 39 ++ .../School/MapperConfig/StudentProfile.cs | 23 - .../School/StudentService.cs | 17 - .../Identity/ConstClasses/DeptConst.cs | 16 + .../Identity/ConstClasses/MenuConst.cs | 16 + .../Identity/ConstClasses/PostConst.cs | 16 + .../Identity/ConstClasses/RoleConst.cs | 16 + .../Identity/ConstClasses/UserConst.cs | 7 + .../Identity/Dtos/UserRoleMenuDto.cs | 12 - .../Identity/Dtos/Vue3RouterDto.cs | 34 ++ .../Identity/EnumClasses/DataScopeEnum.cs | 17 + .../Identity/EnumClasses/MenuTypeEnum.cs | 15 + .../rbac/Yi.RBAC.Domain/DomainSwaggerDoc.xml | 475 +++++++++++++++++- .../Yi.RBAC.Domain/Identity/AccountManager.cs | 108 ++++ .../Identity/Dtos/UserRoleMenuDto.cs | 19 + .../Identity/Entities/DeptEntity.cs | 85 ++++ .../Identity/Entities/MenuEntity.cs | 196 ++++++++ .../Identity/Entities/PostEntity.cs | 77 +++ .../Identity/Entities/RoleDeptEntity.cs | 34 ++ .../Identity/Entities/RoleEntity.cs | 91 ++++ .../Identity/Entities/RoleMenuEntity.cs | 32 ++ .../Identity/Entities/UserEntity.cs | 67 ++- .../Identity/Entities/UserPostEntity.cs | 31 ++ .../Identity/Entities/UserRoleEntity.cs | 31 ++ .../Identity/Repositories/IUserRepository.cs | 1 + .../Yi.RBAC.Domain/Identity/UserManager.cs | 86 ++-- .../School/DataSeeds/StudentDataSeed.cs | 27 - .../School/Entities/StudentEntity.cs | 25 - .../Repositories/UserRepository.cs | 84 ++++ .../rbac/Yi.RBAC.Web/yi-sqlsugar-dev.db | Bin 20480 -> 90112 bytes .../src/project/template/GlobalUsings.cs | 3 +- 77 files changed, 2333 insertions(+), 288 deletions(-) create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptCreateInputVo.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptGetListInputVo.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptGetListOutputDto.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptGetOutputDto.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptUpdateInputVo.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuCreateInputVo.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuGetListInputVo.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuGetListOutputDto.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuGetOutputDto.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuUpdateInputVo.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostCreateInputVo.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostGetListInputVo.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostGetListOutputDto.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostGetOutputDto.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostUpdateInputVo.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleCreateInputVo.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleGetListInputVo.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleGetListOutputDto.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleGetOutputDto.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleUpdateInputVo.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IDeptService.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IMenuService.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IPostService.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IRoleService.cs delete mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/Student/StudentGetOutputDto.cs delete mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentCreateInputVo.cs delete mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentGetListInputVo.cs delete mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentGetListOutputDto.cs delete mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentUpdateInputVo.cs delete mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/IStudentService.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/DeptService.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/DeptProfile.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/MenuProfile.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/PostProfile.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/RoleProfile.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MenuService.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/PostService.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/RoleService.cs delete mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/School/MapperConfig/StudentProfile.cs delete mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/School/StudentService.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/DeptConst.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/MenuConst.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/PostConst.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/RoleConst.cs delete mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/Dtos/UserRoleMenuDto.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/Dtos/Vue3RouterDto.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/EnumClasses/DataScopeEnum.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/EnumClasses/MenuTypeEnum.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/AccountManager.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Dtos/UserRoleMenuDto.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/DeptEntity.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/MenuEntity.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/PostEntity.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/RoleDeptEntity.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/RoleEntity.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/RoleMenuEntity.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/UserPostEntity.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/UserRoleEntity.cs delete mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/School/DataSeeds/StudentDataSeed.cs delete mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/School/Entities/StudentEntity.cs create mode 100644 Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Sqlsugar/Repositories/UserRepository.cs diff --git a/Yi.Framework.Net6/src/module/Yi.Framework.Template/Program.cs b/Yi.Framework.Net6/src/module/Yi.Framework.Template/Program.cs index 5c6e5007..9fe006b5 100644 --- a/Yi.Framework.Net6/src/module/Yi.Framework.Template/Program.cs +++ b/Yi.Framework.Net6/src/module/Yi.Framework.Template/Program.cs @@ -16,7 +16,7 @@ TemplateFactory templateFactory = new(); //List entityNames = new() { "Banner" }; string modelName = "Identity"; string nameSpaces = "Yi.RBAC"; -List entityNames = new() { "User" }; +List entityNames = new() { "_" }; diff --git a/Yi.Framework.Net6/src/project/Template/GlobalUsings.cs b/Yi.Framework.Net6/src/project/Template/GlobalUsings.cs index 71ceb406..d6ecb816 100644 --- a/Yi.Framework.Net6/src/project/Template/GlobalUsings.cs +++ b/Yi.Framework.Net6/src/project/Template/GlobalUsings.cs @@ -1,3 +1,4 @@ global using Yi.Framework.Core.Attributes; global using Yi.Framework.Core.Helper; -global using Yi.Framework.Core.Model; \ No newline at end of file +global using Yi.Framework.Core.Model; +global using Yi.Framework.Core.Exceptions; \ No newline at end of file diff --git a/Yi.Framework.Net6/src/project/rbac/GlobalUsings.cs b/Yi.Framework.Net6/src/project/rbac/GlobalUsings.cs index 71ceb406..d6ecb816 100644 --- a/Yi.Framework.Net6/src/project/rbac/GlobalUsings.cs +++ b/Yi.Framework.Net6/src/project/rbac/GlobalUsings.cs @@ -1,3 +1,4 @@ global using Yi.Framework.Core.Attributes; global using Yi.Framework.Core.Helper; -global using Yi.Framework.Core.Model; \ No newline at end of file +global using Yi.Framework.Core.Model; +global using Yi.Framework.Core.Exceptions; \ No newline at end of file diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/ApplicationContractsSwaggerDoc.xml b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/ApplicationContractsSwaggerDoc.xml index 42557c2a..f1194e71 100644 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/ApplicationContractsSwaggerDoc.xml +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/ApplicationContractsSwaggerDoc.xml @@ -4,25 +4,55 @@ Yi.RBAC.Application.Contracts + + + Dept输入创建对象 + + + + + Menu输入创建对象 + + + + + Post输入创建对象 + + + + + Role输入创建对象 + + User输入创建对象 + + + Dept服务抽象 + + + + + Menu服务抽象 + + + + + Post服务抽象 + + + + + Role服务抽象 + + User服务抽象 - - - Student输入创建对象 - - - - - Student - - diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptCreateInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptCreateInputVo.cs new file mode 100644 index 00000000..7ed81542 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptCreateInputVo.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + /// + /// Dept输入创建对象 + /// + public class DeptCreateInputVo + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string DeptName { get; set; }=string.Empty; + public string DeptCode { get; set; } = string.Empty; + public string? Leader { get; set; } + public long ParentId { get; set; } + public string? Remark { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptGetListInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptGetListInputVo.cs new file mode 100644 index 00000000..b5d09d4a --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptGetListInputVo.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Ddd.Dtos; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class DeptGetListInputVo : PagedAndSortedResultRequestDto + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string DeptName { get; set; }=string.Empty; + public string DeptCode { get; set; } = string.Empty; + public string? Leader { get; set; } + public long ParentId { get; set; } + public string? Remark { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptGetListOutputDto.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptGetListOutputDto.cs new file mode 100644 index 00000000..4c94260e --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptGetListOutputDto.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Ddd.Dtos; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class DeptGetListOutputDto : IEntityDto + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string DeptName { get; set; }=string.Empty; + public string DeptCode { get; set; } = string.Empty; + public string? Leader { get; set; } + public long ParentId { get; set; } + public string? Remark { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptGetOutputDto.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptGetOutputDto.cs new file mode 100644 index 00000000..9de98d68 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptGetOutputDto.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Ddd.Dtos; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class DeptGetOutputDto : IEntityDto + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string DeptName { get; set; }=string.Empty; + public string DeptCode { get; set; } = string.Empty; + public string? Leader { get; set; } + public long ParentId { get; set; } + public string? Remark { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptUpdateInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptUpdateInputVo.cs new file mode 100644 index 00000000..89b53f79 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Dept/DeptUpdateInputVo.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class DeptUpdateInputVo + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string DeptName { get; set; }=string.Empty; + public string DeptCode { get; set; } = string.Empty; + public string? Leader { get; set; } + public long ParentId { get; set; } + public string? Remark { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuCreateInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuCreateInputVo.cs new file mode 100644 index 00000000..73ee70df --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuCreateInputVo.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.RBAC.Domain.Shared.Identity.EnumClasses; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + /// + /// Menu输入创建对象 + /// + public class MenuCreateInputVo + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string MenuName { get; set; } = string.Empty; + public MenuTypeEnum MenuType { get; set; } = MenuTypeEnum.Menu; + public string? PermissionCode { get; set; } + public long ParentId { get; set; } + public string? MenuIcon { get; set; } + public string? Router { get; set; } + public bool IsLink { get; set; } + public bool IsCache { get; set; } + public bool IsShow { get; set; } = true; + public string? Remark { get; set; } + public string? Component { get; set; } + public string? Query { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuGetListInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuGetListInputVo.cs new file mode 100644 index 00000000..064c93e6 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuGetListInputVo.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Ddd.Dtos; +using Yi.RBAC.Domain.Shared.Identity.EnumClasses; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class MenuGetListInputVo : PagedAndSortedResultRequestDto + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string MenuName { get; set; } = string.Empty; + public MenuTypeEnum MenuType { get; set; } = MenuTypeEnum.Menu; + public string? PermissionCode { get; set; } + public long ParentId { get; set; } + public string? MenuIcon { get; set; } + public string? Router { get; set; } + public bool IsLink { get; set; } + public bool IsCache { get; set; } + public bool IsShow { get; set; } = true; + public string? Remark { get; set; } + public string? Component { get; set; } + public string? Query { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuGetListOutputDto.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuGetListOutputDto.cs new file mode 100644 index 00000000..01321cc6 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuGetListOutputDto.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Ddd.Dtos; +using Yi.RBAC.Domain.Shared.Identity.EnumClasses; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class MenuGetListOutputDto : IEntityDto + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string MenuName { get; set; } = string.Empty; + public MenuTypeEnum MenuType { get; set; } = MenuTypeEnum.Menu; + public string? PermissionCode { get; set; } + public long ParentId { get; set; } + public string? MenuIcon { get; set; } + public string? Router { get; set; } + public bool IsLink { get; set; } + public bool IsCache { get; set; } + public bool IsShow { get; set; } = true; + public string? Remark { get; set; } + public string? Component { get; set; } + public string? Query { get; set; } + //public List? Children { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuGetOutputDto.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuGetOutputDto.cs new file mode 100644 index 00000000..28629ac6 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuGetOutputDto.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Ddd.Dtos; +using Yi.RBAC.Domain.Shared.Identity.EnumClasses; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class MenuGetOutputDto : IEntityDto + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string MenuName { get; set; } = string.Empty; + public MenuTypeEnum MenuType { get; set; } = MenuTypeEnum.Menu; + public string? PermissionCode { get; set; } + public long ParentId { get; set; } + public string? MenuIcon { get; set; } + public string? Router { get; set; } + public bool IsLink { get; set; } + public bool IsCache { get; set; } + public bool IsShow { get; set; } = true; + public string? Remark { get; set; } + public string? Component { get; set; } + public string? Query { get; set; } + //public List? Children { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuUpdateInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuUpdateInputVo.cs new file mode 100644 index 00000000..30bd9042 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Menu/MenuUpdateInputVo.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.RBAC.Domain.Shared.Identity.EnumClasses; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class MenuUpdateInputVo + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string MenuName { get; set; } = string.Empty; + public MenuTypeEnum MenuType { get; set; } = MenuTypeEnum.Menu; + public string? PermissionCode { get; set; } + public long ParentId { get; set; } + public string? MenuIcon { get; set; } + public string? Router { get; set; } + public bool IsLink { get; set; } + public bool IsCache { get; set; } + public bool IsShow { get; set; } = true; + public string? Remark { get; set; } + public string? Component { get; set; } + public string? Query { get; set; } + //public List? Children { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostCreateInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostCreateInputVo.cs new file mode 100644 index 00000000..7683c3c2 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostCreateInputVo.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + /// + /// Post输入创建对象 + /// + public class PostCreateInputVo + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string PostCode { get; set; }=string.Empty; + public string PostName { get; set; } = string.Empty; + public string? Remark { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostGetListInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostGetListInputVo.cs new file mode 100644 index 00000000..9f492827 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostGetListInputVo.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Ddd.Dtos; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class PostGetListInputVo : PagedAndSortedResultRequestDto + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string PostCode { get; set; }=string.Empty; + public string PostName { get; set; } = string.Empty; + public string? Remark { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostGetListOutputDto.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostGetListOutputDto.cs new file mode 100644 index 00000000..239bf3b0 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostGetListOutputDto.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Ddd.Dtos; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class PostGetListOutputDto : IEntityDto + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string PostCode { get; set; }=string.Empty; + public string PostName { get; set; } = string.Empty; + public string? Remark { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostGetOutputDto.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostGetOutputDto.cs new file mode 100644 index 00000000..af7e5c1f --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostGetOutputDto.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Ddd.Dtos; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class PostGetOutputDto : IEntityDto + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string PostCode { get; set; }=string.Empty; + public string PostName { get; set; } = string.Empty; + public string? Remark { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostUpdateInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostUpdateInputVo.cs new file mode 100644 index 00000000..5f63aec9 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Post/PostUpdateInputVo.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class PostUpdateInputVo + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public bool State { get; set; } + public string PostCode { get; set; }=string.Empty; + public string PostName { get; set; } = string.Empty; + public string? Remark { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleCreateInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleCreateInputVo.cs new file mode 100644 index 00000000..3b5415e5 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleCreateInputVo.cs @@ -0,0 +1,24 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.RBAC.Domain.Shared.Identity.EnumClasses; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + /// + /// Role输入创建对象 + /// + public class RoleCreateInputVo + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public string? RoleName { get; set; } + public string? RoleCode { get; set; } + public string? Remark { get; set; } + public DataScopeEnum DataScope { get; set; } = DataScopeEnum.ALL; + public bool State { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleGetListInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleGetListInputVo.cs new file mode 100644 index 00000000..b44b9546 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleGetListInputVo.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Ddd.Dtos; +using Yi.RBAC.Domain.Shared.Identity.EnumClasses; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class RoleGetListInputVo : PagedAndSortedResultRequestDto + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public string? RoleName { get; set; } + public string? RoleCode { get; set; } + public string? Remark { get; set; } + public DataScopeEnum DataScope { get; set; } = DataScopeEnum.ALL; + public bool State { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleGetListOutputDto.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleGetListOutputDto.cs new file mode 100644 index 00000000..17c9bd64 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleGetListOutputDto.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Ddd.Dtos; +using Yi.RBAC.Domain.Shared.Identity.EnumClasses; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class RoleGetListOutputDto : IEntityDto + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public string? RoleName { get; set; } + public string? RoleCode { get; set; } + public string? Remark { get; set; } + public DataScopeEnum DataScope { get; set; } = DataScopeEnum.ALL; + public bool State { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleGetOutputDto.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleGetOutputDto.cs new file mode 100644 index 00000000..bfdb63a1 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleGetOutputDto.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Ddd.Dtos; +using Yi.RBAC.Domain.Shared.Identity.EnumClasses; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class RoleGetOutputDto : IEntityDto + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public string? RoleName { get; set; } + public string? RoleCode { get; set; } + public string? Remark { get; set; } + public DataScopeEnum DataScope { get; set; } = DataScopeEnum.ALL; + public bool State { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleUpdateInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleUpdateInputVo.cs new file mode 100644 index 00000000..ee97fc02 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/Role/RoleUpdateInputVo.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.RBAC.Domain.Shared.Identity.EnumClasses; + +namespace Yi.RBAC.Application.Contracts.Identity.Dtos +{ + public class RoleUpdateInputVo + { + public long Id { get; set; } + public DateTime CreationTime { get; set; } = DateTime.Now; + public long? CreatorId { get; set; } + public string? RoleName { get; set; } + public string? RoleCode { get; set; } + public string? Remark { get; set; } + public DataScopeEnum DataScope { get; set; } = DataScopeEnum.ALL; + public bool State { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/User/UserCreateInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/User/UserCreateInputVo.cs index dd4ceda4..acf5fdd6 100644 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/User/UserCreateInputVo.cs +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/User/UserCreateInputVo.cs @@ -12,23 +12,20 @@ namespace Yi.RBAC.Application.Contracts.Identity.Dtos /// public class UserCreateInputVo { - public long Id { get; set; } public string? Name { get; set; } public int? Age { get; set; } public string UserName { get; set; } = string.Empty; public string Password { get; set; } = string.Empty; - public string Salt { get; set; } = string.Empty; public string? Icon { get; set; } public string? Nick { get; set; } public string? Email { get; set; } - public string? Ip { get; set; } public string? Address { get; set; } public long? Phone { get; set; } public string? Introduction { get; set; } public string? Remark { get; set; } public SexEnum Sex { get; set; } = SexEnum.Unknown; + public List? RoleIds { get; set; } + public List? PostIds { get; set; } public long? DeptId { get; set; } - public DateTime CreationTime { get; set; } = DateTime.Now; - public long? CreatorId { get; set; } } } diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/User/UserUpdateInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/User/UserUpdateInputVo.cs index 436b12be..84e0badd 100644 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/User/UserUpdateInputVo.cs +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/Dtos/User/UserUpdateInputVo.cs @@ -27,5 +27,7 @@ namespace Yi.RBAC.Application.Contracts.Identity.Dtos public long? DeptId { get; set; } public DateTime CreationTime { get; set; } = DateTime.Now; public long? CreatorId { get; set; } + + public bool State { get; set; } } } diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IDeptService.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IDeptService.cs new file mode 100644 index 00000000..e8be3078 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IDeptService.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.RBAC.Application.Contracts.Identity.Dtos; +using Yi.Framework.Ddd.Services.Abstract; + +namespace Yi.RBAC.Application.Contracts.Identity +{ + /// + /// Dept服务抽象 + /// + public interface IDeptService : ICrudAppService + { + + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IMenuService.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IMenuService.cs new file mode 100644 index 00000000..f045fa6b --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IMenuService.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.RBAC.Application.Contracts.Identity.Dtos; +using Yi.Framework.Ddd.Services.Abstract; + +namespace Yi.RBAC.Application.Contracts.Identity +{ + /// + /// Menu服务抽象 + /// + public interface IMenuService : ICrudAppService + { + + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IPostService.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IPostService.cs new file mode 100644 index 00000000..7248ce3e --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IPostService.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.RBAC.Application.Contracts.Identity.Dtos; +using Yi.Framework.Ddd.Services.Abstract; + +namespace Yi.RBAC.Application.Contracts.Identity +{ + /// + /// Post服务抽象 + /// + public interface IPostService : ICrudAppService + { + + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IRoleService.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IRoleService.cs new file mode 100644 index 00000000..c02d603e --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/Identity/IRoleService.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.RBAC.Application.Contracts.Identity.Dtos; +using Yi.Framework.Ddd.Services.Abstract; + +namespace Yi.RBAC.Application.Contracts.Identity +{ + /// + /// Role服务抽象 + /// + public interface IRoleService : ICrudAppService + { + + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/Student/StudentGetOutputDto.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/Student/StudentGetOutputDto.cs deleted file mode 100644 index a9d778c0..00000000 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/Student/StudentGetOutputDto.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Yi.Framework.Ddd.Dtos; - -namespace Yi.RBAC.Application.Contracts.School.Dtos -{ - public class StudentGetOutputDto : IEntityDto - { - public long Id { get; set; } - public string Name { get; set; } - public int? Height { get; set; } - public string? Phone { get; set; } - } -} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentCreateInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentCreateInputVo.cs deleted file mode 100644 index cbb303a7..00000000 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentCreateInputVo.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Yi.RBAC.Application.Contracts.School.Dtos -{ - /// - /// Student输入创建对象 - /// - public class StudentCreateInputVo - { - public long Id { get; set; } - public string Name { get; set; } - public int? Height { get; set; } - public string? Phone { get; set; } - } -} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentGetListInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentGetListInputVo.cs deleted file mode 100644 index 382690e0..00000000 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentGetListInputVo.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Yi.Framework.Ddd.Dtos; - -namespace Yi.RBAC.Application.Contracts.School.Dtos -{ - public class StudentGetListInputVo : PagedAndSortedResultRequestDto - { - public long Id { get; set; } - public string Name { get; set; } - public int? Height { get; set; } - public string? Phone { get; set; } - } -} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentGetListOutputDto.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentGetListOutputDto.cs deleted file mode 100644 index ae9ab425..00000000 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentGetListOutputDto.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Yi.Framework.Ddd.Dtos; - -namespace Yi.RBAC.Application.Contracts.School.Dtos -{ - public class StudentGetListOutputDto : IEntityDto - { - public long Id { get; set; } - public string Name { get; set; } - public int? Height { get; set; } - public string? Phone { get; set; } - } -} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentUpdateInputVo.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentUpdateInputVo.cs deleted file mode 100644 index 8d5c81be..00000000 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/Dtos/StudentUpdateInputVo.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Yi.RBAC.Application.Contracts.School.Dtos -{ - public class StudentUpdateInputVo - { - public long Id { get; set; } - public string Name { get; set; } - public int? Height { get; set; } - public string? Phone { get; set; } - } -} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/IStudentService.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/IStudentService.cs deleted file mode 100644 index 668ecd8e..00000000 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application.Contracts/School/IStudentService.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Yi.RBAC.Application.Contracts.School.Dtos; -using Yi.Framework.Ddd.Services.Abstract; - -namespace Yi.RBAC.Application.Contracts.School -{ - /// - /// Student - /// - public interface IStudentService : ICrudAppService - { - - } -} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/ApplicationSwaggerDoc.xml b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/ApplicationSwaggerDoc.xml index f192108d..0deac0b3 100644 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/ApplicationSwaggerDoc.xml +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/ApplicationSwaggerDoc.xml @@ -11,15 +11,38 @@ + + + Dept服务实现 + + + + + Menu服务实现 + + + + + Post服务实现 + + + + + Role服务实现 + + User服务实现 - + - Student服务实现 + 添加用户 + + + diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/AccountService.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/AccountService.cs index 3ddf19fa..04be9890 100644 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/AccountService.cs +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/AccountService.cs @@ -27,7 +27,7 @@ namespace Yi.RBAC.Application.Identity [Autowired] private ICurrentUser _currentUser { get; set; } [Autowired] - private UserManager _userManager { get; set; } + private AccountManager _accountManager { get; set; } /// /// 登录 @@ -38,16 +38,18 @@ namespace Yi.RBAC.Application.Identity { UserEntity user = new(); //登录成功 - await _userManager.LoginValidationAsync(input.UserName, input.Password, x => user = x); + await _accountManager.LoginValidationAsync(input.UserName, input.Password, x => user = x); //获取用户信息 var userInfo = await _userRepository.GetUserAllInfoAsync(user.Id); - //发送令牌 - var claimDic = new Dictionary(); - claimDic.Add(nameof(ICurrentUser.Id), 123456); + if (userInfo.PermissionCodes.Count == 0) + { + throw new UserFriendlyException(UserConst.用户无权限分配); + } - var token = _jwtTokenManager.CreateToken(claimDic); + //创建token + var token = _jwtTokenManager.CreateToken(_accountManager.UserInfoToClaim(userInfo)); return token; } } diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/DeptService.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/DeptService.cs new file mode 100644 index 00000000..3d8e9f1c --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/DeptService.cs @@ -0,0 +1,17 @@ +using Yi.RBAC.Application.Contracts.Identity; +using NET.AutoWebApi.Setting; +using Yi.RBAC.Application.Contracts.Identity.Dtos; +using Yi.RBAC.Domain.Identity.Entities; +using Yi.Framework.Ddd.Services; + +namespace Yi.RBAC.Application.Identity +{ + /// + /// Dept服务实现 + /// + [AppService] + public class DeptService : CrudAppService, + IDeptService, IAutoApiService + { + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/DeptProfile.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/DeptProfile.cs new file mode 100644 index 00000000..15419480 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/DeptProfile.cs @@ -0,0 +1,23 @@ +using AutoMapper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.RBAC.Application.Contracts.Identity.Dtos; +using Yi.RBAC.Domain.Identity.Entities; + +namespace Yi.RBAC.Application.Identity.MapperConfig +{ + public class DeptProfile: Profile + { + public DeptProfile() + { + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/MenuProfile.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/MenuProfile.cs new file mode 100644 index 00000000..2ead3d64 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/MenuProfile.cs @@ -0,0 +1,23 @@ +using AutoMapper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.RBAC.Application.Contracts.Identity.Dtos; +using Yi.RBAC.Domain.Identity.Entities; + +namespace Yi.RBAC.Application.Identity.MapperConfig +{ + public class MenuProfile: Profile + { + public MenuProfile() + { + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/PostProfile.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/PostProfile.cs new file mode 100644 index 00000000..e1bd6225 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/PostProfile.cs @@ -0,0 +1,23 @@ +using AutoMapper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.RBAC.Application.Contracts.Identity.Dtos; +using Yi.RBAC.Domain.Identity.Entities; + +namespace Yi.RBAC.Application.Identity.MapperConfig +{ + public class PostProfile: Profile + { + public PostProfile() + { + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/RoleProfile.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/RoleProfile.cs new file mode 100644 index 00000000..2d87da5f --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MapperConfig/RoleProfile.cs @@ -0,0 +1,23 @@ +using AutoMapper; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.RBAC.Application.Contracts.Identity.Dtos; +using Yi.RBAC.Domain.Identity.Entities; + +namespace Yi.RBAC.Application.Identity.MapperConfig +{ + public class RoleProfile: Profile + { + public RoleProfile() + { + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + CreateMap(); + } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MenuService.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MenuService.cs new file mode 100644 index 00000000..7327aa96 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/MenuService.cs @@ -0,0 +1,17 @@ +using Yi.RBAC.Application.Contracts.Identity; +using NET.AutoWebApi.Setting; +using Yi.RBAC.Application.Contracts.Identity.Dtos; +using Yi.RBAC.Domain.Identity.Entities; +using Yi.Framework.Ddd.Services; + +namespace Yi.RBAC.Application.Identity +{ + /// + /// Menu服务实现 + /// + [AppService] + public class MenuService : CrudAppService, + IMenuService, IAutoApiService + { + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/PostService.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/PostService.cs new file mode 100644 index 00000000..a7685e3a --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/PostService.cs @@ -0,0 +1,17 @@ +using Yi.RBAC.Application.Contracts.Identity; +using NET.AutoWebApi.Setting; +using Yi.RBAC.Application.Contracts.Identity.Dtos; +using Yi.RBAC.Domain.Identity.Entities; +using Yi.Framework.Ddd.Services; + +namespace Yi.RBAC.Application.Identity +{ + /// + /// Post服务实现 + /// + [AppService] + public class PostService : CrudAppService, + IPostService, IAutoApiService + { + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/RoleService.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/RoleService.cs new file mode 100644 index 00000000..f9c346ec --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/RoleService.cs @@ -0,0 +1,17 @@ +using Yi.RBAC.Application.Contracts.Identity; +using NET.AutoWebApi.Setting; +using Yi.RBAC.Application.Contracts.Identity.Dtos; +using Yi.RBAC.Domain.Identity.Entities; +using Yi.Framework.Ddd.Services; + +namespace Yi.RBAC.Application.Identity +{ + /// + /// Role服务实现 + /// + [AppService] + public class RoleService : CrudAppService, + IRoleService, IAutoApiService + { + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/UserService.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/UserService.cs index 6ddc6c96..bdf4b594 100644 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/UserService.cs +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/Identity/UserService.cs @@ -3,6 +3,9 @@ using NET.AutoWebApi.Setting; using Yi.RBAC.Application.Contracts.Identity.Dtos; using Yi.RBAC.Domain.Identity.Entities; using Yi.Framework.Ddd.Services; +using Yi.RBAC.Domain.Shared.Identity.ConstClasses; +using Yi.RBAC.Domain.Identity; +using Yi.Framework.Uow; namespace Yi.RBAC.Application.Identity { @@ -13,5 +16,41 @@ namespace Yi.RBAC.Application.Identity public class UserService : CrudAppService, IUserService, IAutoApiService { + [Autowired] + private UserManager _userManager { get; set; } + + [Autowired] + private IUnitOfWorkManager _unitOfWorkManager { get; set; } + /// + /// 添加用户 + /// + /// + /// + /// + public async override Task CreateAsync(UserCreateInputVo input) + { + if (string.IsNullOrEmpty(input.Password)) + { + throw new UserFriendlyException(UserConst.添加失败_密码为空); + } + if (await _repository.IsAnyAsync(u => input.UserName.Equals(u.UserName))) + { + throw new UserFriendlyException(UserConst.添加失败_用户存在); + } + var entities = await MapToEntityAsync(input); + + entities.BuildPassword(); + + using (var uow = _unitOfWorkManager.CreateContext()) + { + var returnEntity = await _repository.InsertReturnEntityAsync(entities); + await _userManager.GiveUserSetRoleAsync(new List { returnEntity.Id }, input.RoleIds); + await _userManager.GiveUserSetPostAsync(new List { returnEntity.Id }, input.PostIds); + uow.Commit(); + + var result = await MapToGetOutputDtoAsync(returnEntity); + return result; + } + } } } diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/School/MapperConfig/StudentProfile.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/School/MapperConfig/StudentProfile.cs deleted file mode 100644 index 87660de4..00000000 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/School/MapperConfig/StudentProfile.cs +++ /dev/null @@ -1,23 +0,0 @@ -using AutoMapper; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Yi.RBAC.Application.Contracts.School.Dtos; -using Yi.RBAC.Domain.School.Entities; - -namespace Yi.RBAC.Application.School.MapperConfig -{ - public class StudentProfile: Profile - { - public StudentProfile() - { - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - CreateMap(); - } - } -} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/School/StudentService.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/School/StudentService.cs deleted file mode 100644 index 3c46c6e7..00000000 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Application/School/StudentService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using Yi.RBAC.Application.Contracts.School; -using NET.AutoWebApi.Setting; -using Yi.RBAC.Application.Contracts.School.Dtos; -using Yi.RBAC.Domain.School.Entities; -using Yi.Framework.Ddd.Services; - -namespace Yi.RBAC.Application.School -{ - /// - /// Student服务实现 - /// - [AppService] - public class StudentService : CrudAppService, - IStudentService, IAutoApiService - { - } -} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/DeptConst.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/DeptConst.cs new file mode 100644 index 00000000..e0782cc9 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/DeptConst.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.RBAC.Domain.Shared.Identity.ConstClasses +{ + /// + /// 常量定义 + /// + + public class DeptConst + { + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/MenuConst.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/MenuConst.cs new file mode 100644 index 00000000..99856010 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/MenuConst.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.RBAC.Domain.Shared.Identity.ConstClasses +{ + /// + /// 常量定义 + /// + + public class MenuConst + { + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/PostConst.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/PostConst.cs new file mode 100644 index 00000000..e84733d6 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/PostConst.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.RBAC.Domain.Shared.Identity.ConstClasses +{ + /// + /// 常量定义 + /// + + public class PostConst + { + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/RoleConst.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/RoleConst.cs new file mode 100644 index 00000000..71a95507 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/RoleConst.cs @@ -0,0 +1,16 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.RBAC.Domain.Shared.Identity.ConstClasses +{ + /// + /// 常量定义 + /// + + public class RoleConst + { + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/UserConst.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/UserConst.cs index d7adff0b..e2e3942a 100644 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/UserConst.cs +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/ConstClasses/UserConst.cs @@ -14,5 +14,12 @@ namespace Yi.RBAC.Domain.Shared.Identity.ConstClasses { public const string 登录失败_错误 = "登录失败!用户名或密码错误!"; public const string 登录失败_不存在 = "登录失败!用户名不存在!"; + public const string 添加失败_密码为空 = "密码为空,添加失败!"; + public const string 添加失败_用户存在 = "用户已经存在,添加失败!"; + public const string 用户无权限分配 = "登录禁用!该用户分配无任何权限,无意义登录!"; + + public const string Admin = "cc"; + public const string AdminRolesCode = "admin"; + public const string AdminPermissionCode = "*:*:*"; } } diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/Dtos/UserRoleMenuDto.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/Dtos/UserRoleMenuDto.cs deleted file mode 100644 index e91857ff..00000000 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/Dtos/UserRoleMenuDto.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace Yi.RBAC.Domain.Shared.Identity.Dtos -{ - public class UserRoleMenuDto - { - } -} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/Dtos/Vue3RouterDto.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/Dtos/Vue3RouterDto.cs new file mode 100644 index 00000000..c1e0fb2f --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/Dtos/Vue3RouterDto.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using static Yi.Framework.Core.Helper.TreeHelper; + +namespace Yi.RBAC.Domain.Shared.Identity.Dtos +{ + public class Vue3RouterDto : ITreeModel + { + public long Id { get; set; } + public long ParentId { get; set; } + public int OrderNum { get; set; } + + public string Name { get; set; } = string.Empty; + public string Path { get; set; } = string.Empty; + public bool Hidden { get; set; } + public string Redirect { get; set; } = string.Empty; + public string Component { get; set; } = string.Empty; + public bool AlwaysShow { get; set; } + public Meta Meta { get; set; } = new Meta(); + public List? Children { get; set; } + } + + + public class Meta + { + public string Title { get; set; } = string.Empty; + public string Icon { get; set; } = string.Empty; + public bool NoCache { get; set; } + public string link { get; set; } = string.Empty; + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/EnumClasses/DataScopeEnum.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/EnumClasses/DataScopeEnum.cs new file mode 100644 index 00000000..5298296a --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/EnumClasses/DataScopeEnum.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.RBAC.Domain.Shared.Identity.EnumClasses +{ + public enum DataScopeEnum + { + ALL = 0, + CUSTOM = 1, + DEPT = 2, + DEPT_FOLLOW = 3, + USER = 4 + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/EnumClasses/MenuTypeEnum.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/EnumClasses/MenuTypeEnum.cs new file mode 100644 index 00000000..4c2ad6f0 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain.Shared/Identity/EnumClasses/MenuTypeEnum.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Yi.RBAC.Domain.Shared.Identity.EnumClasses +{ + public enum MenuTypeEnum + { + Catalogue = 0, //目录 + Menu = 1, //菜单 + Component = 2//组件 + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/DomainSwaggerDoc.xml b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/DomainSwaggerDoc.xml index a4494807..3683070d 100644 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/DomainSwaggerDoc.xml +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/DomainSwaggerDoc.xml @@ -4,6 +4,387 @@ Yi.RBAC.Domain + + + 用户领域服务 + + + + + 登录效验 + + + + + + + + + 判断账户合法存在 + + + + + + + + 令牌转换 + + + + + + + 部门表 + + + + + 主键 + + + + + 逻辑删除 + + + + + 创建时间 + + + + + 创建者 + + + + + 最后修改者 + + + + + 最后修改时间 + + + + + 排序 + + + + + 状态 + + + + + 部门名称 + + + + + 部门编码 + + + + + 负责人 + + + + + 父级id + + + + + 描述 + + + + + 菜单表 + + + + + 主键 + + + + + 逻辑删除 + + + + + 创建时间 + + + + + 创建者 + + + + + 最后修改者 + + + + + 最后修改时间 + + + + + 排序 + + + + + 状态 + + + + + 菜单名 + + + + + + + + + + + + + + + + + + + + 菜单图标 + + + + + 菜单组件路由 + + + + + 是否为外部链接 + + + + + 是否缓存 + + + + + 是否显示 + + + + + 描述 + + + + + 组件路径 + + + + + 路由参数 + + + + + 实体扩展 + + + + + 构建vue3路由 + + + + + + + 岗位表 + + + + + 主键 + + + + + 逻辑删除 + + + + + 创建时间 + + + + + 创建者 + + + + + 最后修改者 + + + + + 最后修改时间 + + + + + 排序 + + + + + 状态 + + + + + 岗位编码 + + + + + 岗位名称 + + + + + 描述 + + + + + 角色部门关系表 + + + + + 主键 + + + + + 角色id + + + + + 部门id + + + + + 角色表 + + + + + 主键 + + + + + 逻辑删除 + + + + + 创建时间 + + + + + 创建者 + + + + + 最后修改者 + + + + + 最后修改时间 + + + + + 排序 + + + + + 角色名 + + + + + 角色编码 + + + + + 描述 + + + + + 角色数据范围 + + + + + 状态 + + + + + 角色菜单关系表 + + + + + 主键 + + + + + + + + + + + + 用户表 @@ -119,6 +500,78 @@ 排序 + + + 状态 + + + + + 角色 + + + + + 岗位 + + + + + 部门 + + + + + 构建密码,MD5盐值加密 + + + + + 判断密码和加密后的密码是否相同 + + + + + + + 用户岗位表 + + + + + 主键 + + + + + 用户id + + + + + 岗位id + + + + + 用户角色关系表 + + + + + 主键 + + + + + 角色id + + + + + 用户id + + 获取当前登录用户的所有信息 @@ -126,26 +579,20 @@ - + - 用户领域服务 + 给用户设置角色 - - - - 登录效验 - - - - + + - + - 判断账户合法存在 + 给用户设置岗位 - - + + diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/AccountManager.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/AccountManager.cs new file mode 100644 index 00000000..809bdb68 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/AccountManager.cs @@ -0,0 +1,108 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Security.Claims; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Core.CurrentUsers; +using Yi.Framework.Core.Exceptions; +using Yi.Framework.Ddd.Repositories; +using Yi.RBAC.Domain.Identity.Dtos; +using Yi.RBAC.Domain.Identity.Entities; +using Yi.RBAC.Domain.Shared.Identity.ConstClasses; + +namespace Yi.RBAC.Domain.Identity +{ + + /// + /// 用户领域服务 + /// + [AppService] + public class AccountManager + { + private readonly IRepository _repository; + public AccountManager(IRepository repository) + { + _repository = repository; + } + + /// + /// 登录效验 + /// + /// + /// + /// + /// + public async Task LoginValidationAsync(string userName, string password, Action? userAction = null) + { + var user = new UserEntity(); + if (await ExistAsync(userName, o => user = o)) + { + if (userAction is not null) + { + userAction.Invoke(user); + } + if (user.Password == MD5Helper.SHA2Encode(password, user.Salt)) + { + return; + } + throw new UserFriendlyException(UserConst.登录失败_错误); + } + throw new UserFriendlyException(UserConst.登录失败_不存在); + } + + /// + /// 判断账户合法存在 + /// + /// + /// + /// + public async Task ExistAsync(string userName, Action? userAction = null) + { + var user = await _repository.GetFirstAsync(u => u.UserName == userName && u.State == true); + if (userAction is not null) + { + userAction.Invoke(user); + } + if (user == null) + { + return false; + } + return true; + } + + /// + /// 令牌转换 + /// + /// + /// + + public Dictionary UserInfoToClaim(UserRoleMenuDto dto) + { + var claims = new Dictionary(); + claims.Add(nameof(ICurrentUser.Id), dto.User.Id); + claims.Add(nameof(ICurrentUser.UserName), dto.User.UserName); + if (dto.User.Email is not null) + { + claims.Add(nameof(ICurrentUser.Email), dto.User.Email); + } + if (dto.User.Phone is not null) + { + claims.Add(nameof(ICurrentUser.PhoneNumber), dto.User.Phone); + } + if (UserConst.Admin.Equals(dto.User.UserName)) + { + claims.Add(nameof(ICurrentUser.Permission), UserConst.AdminPermissionCode); + } + else + { + claims.Add(nameof(ICurrentUser.Permission), dto.PermissionCodes.Where(x => !string.IsNullOrEmpty(x))); + } + + return claims; + } + + } + +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Dtos/UserRoleMenuDto.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Dtos/UserRoleMenuDto.cs new file mode 100644 index 00000000..80a4cc64 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Dtos/UserRoleMenuDto.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.RBAC.Domain.Identity.Entities; + +namespace Yi.RBAC.Domain.Identity.Dtos +{ + public class UserRoleMenuDto + { + public UserEntity User { get; set; } = new(); + public HashSet Roles { get; set; } = new(); + public HashSet Menus { get; set; } = new(); + + public List RoleCodes { get; set; } = new(); + public List PermissionCodes { get; set; } = new(); + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/DeptEntity.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/DeptEntity.cs new file mode 100644 index 00000000..f4b3d1ec --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/DeptEntity.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json.Serialization; +using SqlSugar; +using Yi.Framework.Data.Auditing; +using Yi.Framework.Data.Entities; +using Yi.Framework.Ddd.Entities; + +namespace Yi.RBAC.Domain.Identity.Entities +{ + /// + /// 部门表 + /// + [SugarTable("Dept")] + public partial class DeptEntity : IEntity, ISoftDelete, IAuditedObject, IOrderNum, IState + { + /// + /// 主键 + /// + [SugarColumn(IsPrimaryKey = true)] + public long Id { get; set; } + + /// + /// 逻辑删除 + /// + public bool IsDeleted { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreationTime { get; set; } = DateTime.Now; + + /// + /// 创建者 + /// + public long? CreatorId { get; set; } + + /// + /// 最后修改者 + /// + public long? LastModifierId { get; set; } + + /// + /// 最后修改时间 + /// + public DateTime? LastModificationTime { get; set; } + + /// + /// 排序 + /// + public int OrderNum { get; set; } = 0; + + /// + /// 状态 + /// + public bool State { get; set; } + + /// + /// 部门名称 + /// + public string DeptName { get; set; }=string.Empty; + /// + /// 部门编码 + /// + [SugarColumn(ColumnName = "DeptCode")] + public string DeptCode { get; set; } = string.Empty; + /// + /// 负责人 + /// + [SugarColumn(ColumnName = "Leader")] + public string? Leader { get; set; } + /// + /// 父级id + /// + [SugarColumn(ColumnName = "ParentId")] + public long ParentId { get; set; } + + /// + /// 描述 + /// + [SugarColumn(ColumnName = "Remark")] + public string? Remark { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/MenuEntity.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/MenuEntity.cs new file mode 100644 index 00000000..00c36374 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/MenuEntity.cs @@ -0,0 +1,196 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json.Serialization; +using SqlSugar; +using Yi.Framework.Data.Auditing; +using Yi.Framework.Data.Entities; +using Yi.Framework.Ddd.Entities; +using Yi.RBAC.Domain.Shared.Identity.Dtos; +using Yi.RBAC.Domain.Shared.Identity.EnumClasses; + +namespace Yi.RBAC.Domain.Identity.Entities +{ + /// + /// 菜单表 + /// + [SugarTable("Menu")] + public partial class MenuEntity : IEntity, ISoftDelete, IAuditedObject, IOrderNum, IState + { + /// + /// 主键 + /// + [SugarColumn(IsPrimaryKey = true)] + public long Id { get; set; } + + /// + /// 逻辑删除 + /// + public bool IsDeleted { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreationTime { get; set; } = DateTime.Now; + + /// + /// 创建者 + /// + public long? CreatorId { get; set; } + + /// + /// 最后修改者 + /// + public long? LastModifierId { get; set; } + + /// + /// 最后修改时间 + /// + public DateTime? LastModificationTime { get; set; } + + /// + /// 排序 + /// + public int OrderNum { get; set; } = 0; + + /// + /// 状态 + /// + public bool State { get; set; } + + /// + /// 菜单名 + /// + public string MenuName { get; set; } = string.Empty; + /// + /// + /// + [SugarColumn(ColumnName = "MenuType")] + public MenuTypeEnum MenuType { get; set; } = MenuTypeEnum.Menu; + /// + /// + /// + [SugarColumn(ColumnName = "PermissionCode")] + public string? PermissionCode { get; set; } + /// + /// + /// + [SugarColumn(ColumnName = "ParentId")] + public long ParentId { get; set; } + + /// + /// 菜单图标 + /// + [SugarColumn(ColumnName = "MenuIcon")] + public string? MenuIcon { get; set; } + /// + /// 菜单组件路由 + /// + [SugarColumn(ColumnName = "Router")] + public string? Router { get; set; } + /// + /// 是否为外部链接 + /// + [SugarColumn(ColumnName = "IsLink")] + public bool IsLink { get; set; } + /// + /// 是否缓存 + /// + [SugarColumn(ColumnName = "IsCache")] + public bool IsCache { get; set; } + /// + /// 是否显示 + /// + [SugarColumn(ColumnName = "IsShow")] + public bool IsShow { get; set; } = true; + + /// + /// 描述 + /// + [SugarColumn(ColumnName = "Remark")] + public string? Remark { get; set; } + /// + /// 组件路径 + /// + [SugarColumn(ColumnName = "Component")] + public string? Component { get; set; } + /// + /// 路由参数 + /// + [SugarColumn(ColumnName = "Query")] + public string? Query { get; set; } + + [SugarColumn(IsIgnore = true)] + public List? Children { get; set; } + } + + /// + /// 实体扩展 + /// + public static class MenuEntityExtensions + { + /// + /// 构建vue3路由 + /// + /// + /// + public static List Vue3RouterBuild(this List menus) + { + menus = menus.Where(m => m.MenuType != MenuTypeEnum.Component).ToList(); + List routers = new(); + foreach (var m in menus) + { + + var r = new Vue3RouterDto(); + r.OrderNum = m.OrderNum; + var routerName = m.Router?.Split("/").LastOrDefault(); + r.Id = m.Id; + r.ParentId = m.ParentId; + + //开头大写 + r.Name = routerName?.First().ToString().ToUpper() + routerName?.Substring(1); + r.Path = m.Router!; + r.Hidden = !m.IsShow; + + + if (m.MenuType == MenuTypeEnum.Catalogue) + { + r.Redirect = "noRedirect"; + r.AlwaysShow = true; + + //判断是否为最顶层的路由 + if (0 == m.ParentId) + { + r.Component = "Layout"; + } + else + { + r.Component = "ParentView"; + } + } + if (m.MenuType == MenuTypeEnum.Menu) + { + r.Redirect = "noRedirect"; + r.AlwaysShow = true; + r.Component = m.Component!; + r.AlwaysShow = false; + } + r.Meta = new Meta + { + Title = m.MenuName!, + Icon = m.MenuIcon!, + NoCache = !m.IsCache + }; + if (m.IsLink) + { + r.Meta.link = m.Router!; + r.AlwaysShow = false; + } + + routers.Add(r); + } + return TreeHelper.SetTree(routers); + + } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/PostEntity.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/PostEntity.cs new file mode 100644 index 00000000..902053ad --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/PostEntity.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json.Serialization; +using SqlSugar; +using Yi.Framework.Data.Auditing; +using Yi.Framework.Data.Entities; +using Yi.Framework.Ddd.Entities; + +namespace Yi.RBAC.Domain.Identity.Entities +{ + /// + /// 岗位表 + /// + [SugarTable("Post")] + public partial class PostEntity : IEntity, ISoftDelete, IAuditedObject, IOrderNum, IState + { + + /// + /// 主键 + /// + [SugarColumn(IsPrimaryKey = true)] + public long Id { get; set; } + + /// + /// 逻辑删除 + /// + public bool IsDeleted { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreationTime { get; set; } = DateTime.Now; + + /// + /// 创建者 + /// + public long? CreatorId { get; set; } + + /// + /// 最后修改者 + /// + public long? LastModifierId { get; set; } + + /// + /// 最后修改时间 + /// + public DateTime? LastModificationTime { get; set; } + + /// + /// 排序 + /// + public int OrderNum { get; set; } = 0; + + /// + /// 状态 + /// + public bool State { get; set; } + + /// + /// 岗位编码 + /// + [SugarColumn(ColumnName = "PostCode")] + public string PostCode { get; set; }=string.Empty; + /// + /// 岗位名称 + /// + [SugarColumn(ColumnName = "PostName")] + public string PostName { get; set; } = string.Empty; + + /// + /// 描述 + /// + [SugarColumn(ColumnName = "Remark")] + public string? Remark { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/RoleDeptEntity.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/RoleDeptEntity.cs new file mode 100644 index 00000000..21deaf31 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/RoleDeptEntity.cs @@ -0,0 +1,34 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json.Serialization; +using SqlSugar; +using Yi.Framework.Ddd.Entities; + +namespace Yi.RBAC.Domain.Identity.Entities; + + /// + /// 角色部门关系表 + /// + [SugarTable("RoleDept")] +public partial class RoleDeptEntity : IEntity +{ + /// + /// 主键 + /// + [SugarColumn(IsPrimaryKey = true)] + public long Id { get; set; } + + /// + /// 角色id + /// + [SugarColumn(ColumnName = "RoleId")] + public long? RoleId { get; set; } + /// + /// 部门id + /// + [SugarColumn(ColumnName = "DeptId")] + public long? DeptId { get; set; } + + +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/RoleEntity.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/RoleEntity.cs new file mode 100644 index 00000000..3693ff21 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/RoleEntity.cs @@ -0,0 +1,91 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Data.Auditing; +using Yi.Framework.Data.Entities; +using Yi.Framework.Ddd.Entities; +using Yi.RBAC.Domain.Shared.Identity.EnumClasses; + +namespace Yi.RBAC.Domain.Identity.Entities +{ + /// + /// 角色表 + /// + [SugarTable("Role")] + public class RoleEntity : IEntity, ISoftDelete, IAuditedObject, IOrderNum, IState + { + /// + /// 主键 + /// + [SugarColumn(IsPrimaryKey = true)] + public long Id { get; set; } + + /// + /// 逻辑删除 + /// + public bool IsDeleted { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreationTime { get; set; } = DateTime.Now; + + /// + /// 创建者 + /// + public long? CreatorId { get; set; } + + /// + /// 最后修改者 + /// + public long? LastModifierId { get; set; } + + /// + /// 最后修改时间 + /// + public DateTime? LastModificationTime { get; set; } + + /// + /// 排序 + /// + public int OrderNum { get; set; } = 0; + + + /// + /// 角色名 + /// + public string RoleName { get; set; } = string.Empty; + + /// + /// 角色编码 + /// + [SugarColumn(ColumnName = "RoleCode")] + public string RoleCode { get; set; } = string.Empty; + + /// + /// 描述 + /// + [SugarColumn(ColumnName = "Remark")] + public string? Remark { get; set; } + /// + /// 角色数据范围 + /// + [SugarColumn(ColumnName = "DataScope")] + public DataScopeEnum DataScope { get; set; } = DataScopeEnum.ALL; + + /// + /// 状态 + /// + public bool State { get; set; } + + + [Navigate(typeof(RoleMenuEntity), nameof(RoleMenuEntity.RoleId), nameof(RoleMenuEntity.MenuId))] + public List Menus { get; set; } + + [Navigate(typeof(RoleDeptEntity), nameof(RoleDeptEntity.RoleId), nameof(RoleDeptEntity.DeptId))] + public List Depts { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/RoleMenuEntity.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/RoleMenuEntity.cs new file mode 100644 index 00000000..0cec74cc --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/RoleMenuEntity.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json.Serialization; +using SqlSugar; +using Yi.Framework.Ddd.Entities; + +namespace Yi.RBAC.Domain.Identity.Entities; +/// +/// 角色菜单关系表 +/// +[SugarTable("RoleMenu")] +public partial class RoleMenuEntity : IEntity + +{ + /// + /// 主键 + /// + [SugarColumn(IsPrimaryKey = true)] + public long Id { get; set; } + /// + /// + /// + [SugarColumn(ColumnName = "RoleId")] + public long RoleId { get; set; } + /// + /// + /// + [SugarColumn(ColumnName = "MenuId")] + public long MenuId { get; set; } + +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/UserEntity.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/UserEntity.cs index 19d9bb3d..221fd070 100644 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/UserEntity.cs +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/UserEntity.cs @@ -15,7 +15,7 @@ namespace Yi.RBAC.Domain.Identity.Entities /// 用户表 /// [SugarTable("User")] - public class UserEntity : IEntity, ISoftDelete, IAuditedObject, IOrderNum + public class UserEntity : IEntity, ISoftDelete, IAuditedObject, IOrderNum,IState { /// /// 主键 @@ -128,6 +128,71 @@ namespace Yi.RBAC.Domain.Identity.Entities /// 排序 /// public int OrderNum { get; set; } = 0; + + + /// + /// 状态 + /// + public bool State { get; set; } = true; + + + /// + /// 角色 + /// + [Navigate(typeof(UserRoleEntity), nameof(UserRoleEntity.UserId), nameof(UserRoleEntity.RoleId))] + public List Roles { get; set; } + + /// + /// 岗位 + /// + + [Navigate(typeof(UserPostEntity), nameof(UserPostEntity.UserId), nameof(UserPostEntity.PostId))] + public List Posts { get; set; } + + /// + /// 部门 + /// + + [Navigate(NavigateType.OneToOne, nameof(DeptId))] + public DeptEntity? Dept { get; set; } + + /// + /// 构建密码,MD5盐值加密 + /// + public UserEntity BuildPassword(string? password = null) + { + //如果不传值,那就把自己的password当作传进来的password + if (password == null) + { + if (Password == null) + { + throw new ArgumentNullException(nameof(Password)); + } + password = Password; + } + Salt = MD5Helper.GenerateSalt(); + Password = MD5Helper.SHA2Encode(password, Salt); + return this; + } + + /// + /// 判断密码和加密后的密码是否相同 + /// + /// + /// + public bool JudgePassword(string password) + { + if (this.Salt is null) + { + throw new ArgumentNullException(this.Salt); + } + var p = MD5Helper.SHA2Encode(password, Salt); + if (Password == MD5Helper.SHA2Encode(password, Salt)) + { + return true; + } + return false; + } } diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/UserPostEntity.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/UserPostEntity.cs new file mode 100644 index 00000000..f2550a9c --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/UserPostEntity.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json.Serialization; +using SqlSugar; +using Yi.Framework.Ddd.Entities; + +namespace Yi.RBAC.Domain.Identity.Entities; +/// +/// 用户岗位表 +/// +[SugarTable("UserPost")] +public partial class UserPostEntity : IEntity +{ + /// + /// 主键 + /// + [SugarColumn(IsPrimaryKey = true)] + public long Id { get; set; } + /// + /// 用户id + /// + [SugarColumn(ColumnName = "UserId")] + public long UserId { get; set; } + /// + /// 岗位id + /// + [SugarColumn(ColumnName = "PostId")] + public long PostId { get; set; } + +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/UserRoleEntity.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/UserRoleEntity.cs new file mode 100644 index 00000000..ba251dff --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Entities/UserRoleEntity.cs @@ -0,0 +1,31 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using SqlSugar; +using Yi.Framework.Ddd.Entities; + +namespace Yi.RBAC.Domain.Identity.Entities +{ + /// + /// 用户角色关系表 + /// + [SugarTable("UserRole")] + public partial class UserRoleEntity : IEntity + { + /// + /// 主键 + /// + [SugarColumn(IsPrimaryKey = true)] + public long Id { get; set; } + + /// + /// 角色id + /// + public long RoleId { get; set; } + + /// + /// 用户id + /// + public long UserId { get; set; } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Repositories/IUserRepository.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Repositories/IUserRepository.cs index a4c13f87..8303d8d3 100644 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Repositories/IUserRepository.cs +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/Repositories/IUserRepository.cs @@ -4,6 +4,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; using Yi.Framework.Ddd.Repositories; +using Yi.RBAC.Domain.Identity.Dtos; using Yi.RBAC.Domain.Identity.Entities; using Yi.RBAC.Domain.Shared.Identity.Dtos; diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/UserManager.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/UserManager.cs index 7a6c84c0..9fc2377c 100644 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/UserManager.cs +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/Identity/UserManager.cs @@ -3,70 +3,80 @@ using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Yi.Framework.Core.Exceptions; using Yi.Framework.Ddd.Repositories; using Yi.RBAC.Domain.Identity.Entities; -using Yi.RBAC.Domain.Shared.Identity.ConstClasses; namespace Yi.RBAC.Domain.Identity { - - /// - /// 用户领域服务 - /// [AppService] public class UserManager { private readonly IRepository _repository; - public UserManager(IRepository repository) - { - _repository = repository; - } + private readonly IRepository _repositoryUserRole; + private readonly IRepository _repositoryUserPost; + public UserManager(IRepository repository, IRepository repositoryUserRole, IRepository repositoryUserPost) => + (_repository, _repositoryUserRole, _repositoryUserPost) = + (repository, repositoryUserRole, repositoryUserPost); /// - /// 登录效验 + /// 给用户设置角色 /// - /// - /// - /// + /// + /// /// - public async Task LoginValidationAsync(string userName, string password, Action? userAction = null) + public async Task GiveUserSetRoleAsync(List userIds, List? roleIds) { - var user = new UserEntity(); - if (await ExistAsync(userName, o => user = o)) + //删除用户之前所有的用户角色关系(物理删除,没有恢复的必要) + await _repositoryUserRole.DeleteAsync(u => userIds.Contains(u.UserId)); + + if (roleIds is not null) { - if (userAction is not null) + //遍历用户 + foreach (var userId in userIds) { - userAction.Invoke(user); + //添加新的关系 + List userRoleEntities = new(); + + foreach (var roleId in roleIds) + { + userRoleEntities.Add(new UserRoleEntity() { Id = SnowflakeHelper.NextId, UserId = userId, RoleId = roleId }); + } + //一次性批量添加 + await _repositoryUserRole.InsertRangeAsync(userRoleEntities); } - if (user.Password != MD5Helper.SHA2Encode(password, user.Salt)) - { - return; - } - throw new UserFriendlyException(UserConst.登录失败_错误); } - throw new UserFriendlyException(UserConst.登录失败_不存在); } + /// - /// 判断账户合法存在 + /// 给用户设置岗位 /// - /// - /// + /// + /// /// - public async Task ExistAsync(string userName, Action? userAction = null) + public async Task GiveUserSetPostAsync(List userIds, List? postIds) { - var user = await _repository.GetFirstAsync(u => u.UserName == userName && u.IsDeleted == false); - if (userAction is not null) + //删除用户之前所有的用户角色关系(物理删除,没有恢复的必要) + await _repositoryUserPost.DeleteAsync(u => userIds.Contains(u.UserId)); + if (postIds is not null) { - userAction.Invoke(user); + //遍历用户 + foreach (var userId in userIds) + { + //添加新的关系 + List userPostEntities = new(); + foreach (var post in postIds) + { + userPostEntities.Add(new UserPostEntity() { Id = SnowflakeHelper.NextId, UserId = userId, PostId = post }); + } + + //一次性批量添加 + await _repositoryUserPost.InsertRangeAsync(userPostEntities); + } + } - if (user == null) - { - return false; - } - return true; } } -} + +} \ No newline at end of file diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/School/DataSeeds/StudentDataSeed.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/School/DataSeeds/StudentDataSeed.cs deleted file mode 100644 index 09decf20..00000000 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/School/DataSeeds/StudentDataSeed.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Yi.Framework.Data.DataSeeds; -using Yi.Framework.Ddd.Repositories; -using Yi.RBAC.Domain.School.Entities; - -namespace Yi.RBAC.Domain.School.DataSeeds -{ - [AppService(typeof(IDataSeed))] - public class StudentDataSeed : AbstractDataSeed - { - public StudentDataSeed(IRepository repository) : base(repository) - { - } - - public override List GetSeedData() - { - return new List() { new StudentEntity { Id = SnowflakeHelper.NextId, Name = "你好", Phone = "123", Height = 188, IsDeleted = false } , - new StudentEntity { Id = SnowflakeHelper.NextId, Name = "你好1", Phone = "123", Height = 188, IsDeleted = false }, - new StudentEntity { Id = SnowflakeHelper.NextId, Name = "你好2", Phone = "123", Height = 188, IsDeleted = false } - }; - } - } -} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/School/Entities/StudentEntity.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/School/Entities/StudentEntity.cs deleted file mode 100644 index 3308c38d..00000000 --- a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Domain/School/Entities/StudentEntity.cs +++ /dev/null @@ -1,25 +0,0 @@ -using SqlSugar; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Yi.Framework.Data.Entities; -using Yi.Framework.Ddd.Entities; - -namespace Yi.RBAC.Domain.School.Entities -{ - [SugarTable("Student")] - public class StudentEntity : IEntity,ISoftDelete - { - [SugarColumn(IsPrimaryKey = true)] - public long Id { get; set; } - - public string Name { get; set; } - - public int? Height { get; set; } - - public string? Phone { get; set; } - public bool IsDeleted { get; set; } = false; - } -} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Sqlsugar/Repositories/UserRepository.cs b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Sqlsugar/Repositories/UserRepository.cs new file mode 100644 index 00000000..a867ceb8 --- /dev/null +++ b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Sqlsugar/Repositories/UserRepository.cs @@ -0,0 +1,84 @@ +using SqlSugar; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Yi.Framework.Core.Sqlsugar.Repositories; +using Yi.Framework.Ddd.Repositories; +using Yi.RBAC.Domain.Identity.Dtos; +using Yi.RBAC.Domain.Identity.Entities; +using Yi.RBAC.Domain.Identity.Repositories; +using Yi.RBAC.Domain.Shared.Identity.ConstClasses; +using Yi.RBAC.Domain.Shared.Identity.Dtos; + +namespace Yi.RBAC.Sqlsugar.Repositories +{ + [AppService] + public class UserRepository : SqlsugarRepository, IUserRepository + { + public UserRepository(ISqlSugarClient context) : base(context) + { + } + + /// + /// 获取用户id的全部信息 + /// + /// + /// + /// + public async Task GetUserAllInfoAsync(long userId) + { + var userRoleMenu = new UserRoleMenuDto(); + //首先获取到该用户全部信息,导航到角色、菜单,(菜单需要去重,完全交给Set来处理即可) + + //得到用户 + var user = await _DbQueryable.Includes(u => u.Roles.Where(r => r.IsDeleted == false).ToList(), r => r.Menus.Where(m => m.IsDeleted == false).ToList()).InSingleAsync(userId); + if (user is null) + { + throw new ArgumentNullException(nameof(userId)); + } + user.Password = string.Empty; + user.Salt = string.Empty; + + //超级管理员特殊处理 + if (UserConst.Admin.Equals(user.UserName)) + { + userRoleMenu.User = user; + userRoleMenu.RoleCodes.Add(UserConst.AdminRolesCode); + userRoleMenu.PermissionCodes.Add(UserConst.AdminPermissionCode); + return userRoleMenu; + } + + //得到角色集合 + var roleList = user.Roles; + + //得到菜单集合 + foreach (var role in roleList) + { + userRoleMenu.RoleCodes.Add(role.RoleCode); + + if (role.Menus is not null) + { + foreach (var menu in role.Menus) + { + if (!string.IsNullOrEmpty(menu.PermissionCode)) + { + userRoleMenu.PermissionCodes.Add(menu.PermissionCode); + } + userRoleMenu.Menus.Add(menu); + } + } + + //刚好可以去除一下多余的导航属性 + role.Menus =new List(); + userRoleMenu.Roles.Add(role); + } + + user.Roles = new List(); + userRoleMenu.User = user; + + return userRoleMenu; + } + } +} diff --git a/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Web/yi-sqlsugar-dev.db b/Yi.Framework.Net6/src/project/rbac/Yi.RBAC.Web/yi-sqlsugar-dev.db index d617c04c0ca8e71e1cc6b64cb835a0fbc719a019..0f42efaaade8513f8854dbc314f7807eaa26c56a 100644 GIT binary patch literal 90112 zcmeI4&u`o28OKT4)(_jV>?E@58U{G;kQithOOEps0j9`aqD8i4$!_CZ6h@+D+7hXf zR2+BdK?%|VEwF!}mt6*IC|Y#)6$5tLVTT1-3*f}LyC%6lazpZfYN@M zkbL#NFZn+2=lMP_U-Cs#*vQI;BZk*$J?iYf3*g=(DlUBHxXE6221oGISV@41FBR4L%*(<6q-H=U%Ws z$G@FB6`V@X@|>)cr3d;uRo3UC*f3P{cX3OXw7goCiU~UvZ^kD=Q?s*t^F2enSCuF~ zr|O1%K9SC^q&8QC&D8bmiZEwq&z*@5&t=MU!acbnD~7PPzA3D2WwSyqpIJ@iw}o3P z+rk^H4qf0@&n%>dTnhzZ{@jUf9igkOj!=r67$%-ib_POI@i_m{xps%hh{2;B>A4db zeOanXhGh1)qqAlw*2J1LC)^jc(ypkTNiHnRTO`cFRE3o>KvG50Ib$w5QbDX5z7;YhRr!7ea+GDeT-x_6T&an2)w48H_bf`4%bKL?p5?h+Rbg0c z>9noMD2Aq%8zn>bF*z^QM9tgig7lyRxC7O)RClPY-ELZwL~3(WCQp_{Lo!(ErKU|( zW+m03<@OD-qHe6JWqC(-iru9`$+e|+#dWRBl+mcU^?|uexLYuod3PB*W4;-Wbw)15 z^{S*a?DM!&@OF03qNfX7gOkFV8geb9$Q}2KT-%Of!cI**PDag$egB3Tv6N5y*wGI3 zY`ky8z9Rl6&cwlOplAz*Dx}r2_XyM_UY12eER@uG=P>1n8dGo-texW?^YZDj;MCQ) z*Mo-4vOFAXMn^1}*4o~sNTeEc9zE)1%I?|Ibe~Qow#m4LJIQmjn>^`C%XmsfA5TXt zdB)8S(8GrIVW;7g)w9t*7J0gggLF$Y++^vH7FBW+x1*Aeeo2MHek!B}iU~T7Jed!f zPW*7mbRvykw1=Heq%1hmo*fX4uKuA)n}^=xM^4gevaYkotD7F$(V7!ANpU=$9V(z! zd}lIwwP8q_=aeI(XJv)W8l1xzDK(>~#nP@h9qAn5tfIoMdf;}Ek0|NFv|6jPDUNbv zX4dZRMnlpLU9BZihy6rND2fR>MjpRCWQzKO2~*TGTG1YKikh+@YFpGqqpPT?lABx| zn#@Wfo2LC4VPLBERho?*Qr4K>&J(A3Nf|428rQZO22 zCeYR?;8aX2w`b9G<#|(*E4wTjj=l-C-UXa*IPEa;d`>b%X9K~h)Qr~zq}7FDqLmnk zvRA{w*l)Pl*Rj9GK4l4PAOHd&00JNY0w4eaAOHd&00JNY0{>?MvxC9lbYLbt`Rkuu z{p0m=ZU~ndIGCZl*|L`<09{AT6zy11mUnIFdvGUggjxydVOPFQT zJl(c^9cPu9MZ>H|gR#GHv2SB9V$WFu8wh{^2!H?xfB*=900@8p2!H?xfIxo}7##@m z_NRkE^GEAL!9d3kJ}@#6jI=%>aJ2p(82d99`#C#c0|5{K0T2KI5C8!X009sH0T2Lz zUJ3jo7@i1EG%sJ9o}T8W!_(8@aGG5k4o^P(H1|9(&Xw3!F5OJ-<{GvA>uX8nR-#zA zU97Cjxq9{9**h2Z4t}|M`*LDsxvbpTzMb7$*MC(k-73_#*6XDk>lbgYsf*ROR!X<3 z`x}XSf!CZvJ z4+KB}1V8`;KmY_l00ck)1V8`;K%g%PnCt(o4=~pH|3mA;1+D+L{%^j%G#o~O00@8p z2!H?xfB*=900@8p2!H?x{BQ!a{*U+nAI=eX009sH0T2KI5C8!X009sH0T2LzekOqR z|9alKmY_l00ck)1V8`; zKmY_l00cmwp9x_7zn{GW+du#WKmY_l00ck)1V8`;KmY_l;CKjN{r`A4;w~Tn0w4ea zAOHd&00JNY0w4eaAkfbQu>RlA-hpi(00JNY0w4eaAOHd&00JNY0w8ca1hD>pJRETs z5C8!X009sH0T2KI5C8!X009u_X98IN?`QA8HV^;-5C8!X009sH0T2KI5C8!XI35C6 z|34m%xC;n?00@8p2!H?xfB*=900@8p2=p@nTK^Bko^i2%vja8|009sH0T2KI5C8!X z009sH0T2LzSBAi;z+f;Ko_zRe?!SR?j?T~7`4n&ED#E&%s|ZVv#yML555!(@v2WP{ z8wh{^2!H?xfB*=900@8p2!H?xfWWIvV00kJ+aCl1BLl(6k0lcA~ES-$z6A>OM>Te_s>)tBc}>HJD+b4A!pUC*uv zb9V9EndtCbraULylPj`f2y5$`!rE3gE9CN-)l`04xV5q^yus?wz1-@Vg>*O9LP3~6 zcPcoQp5-}NDN7IZcdD`>6~%_3n!k&-9mRy5iZ|mE-|t9H)eS1A^NFJ!q3oVJ;%O`O zlJ4Z$krUlILRVWIq0~vH=`iW~$<9D%Djw%QI@k6L88LXYBRzK_qc2NU$&gIPb$HG6 z#+q1@=7jsAR@xP{Gs%U8dCR3{VXDH)n5U(Rq;+JIL2lRCaxkyWiMoEEYOGP`%^j5r zV%6}ikSVFk_bZU%EZgPMzGvY|O_ZyirJ1^CQL0?lBwhC`&+V!T!(zuk+nS7GXll7p zGGrf<^HNRJyp1kM4?2K5P%TS!huYfhrZq{VHaBJRWLY#MgQZ>ur-{m}q&niReS@s1 z8>?zr-jSVw=~AKO+ETmXx>jb&Xw=;Lz+5KWEf~zayNsPN-;BpPBbSDZRY_^s=W(at z?d+aK?>huhL!Oa4?iabX9mRy5ns}Uyni2c{4KrdXpZ2k%9q8G3--vxh{B1u6+y;ua zU9OF{)wtJ#hRm`&9BW2LESc8Y z-la&S8gw2#>SfCA+0%5NP9?Ui*ZC%c<09nvCXZsK-S^3gA;aM(|U)Ic#o$B`%VA=8N;E}2fG@r(Ab(}|P? zC)%?EqS4hqRB7|jd;G{rT20n<_IP#ELpxe?q9!Sh$FoBP)Qay+Ca*RON%Nd?Wb~}8 zuvvq17$c=-^t4#oHK!w;Bb-%K*i{eQF7gp2U6@vDbvDIOj?B#3-Q8$N+M%npB9)`Oy0mJv-v9@HzNno5D;eAB*3DunI+(lJOF?~7jXap diff --git a/Yi.Framework.Net6/src/project/template/GlobalUsings.cs b/Yi.Framework.Net6/src/project/template/GlobalUsings.cs index 71ceb406..d6ecb816 100644 --- a/Yi.Framework.Net6/src/project/template/GlobalUsings.cs +++ b/Yi.Framework.Net6/src/project/template/GlobalUsings.cs @@ -1,3 +1,4 @@ global using Yi.Framework.Core.Attributes; global using Yi.Framework.Core.Helper; -global using Yi.Framework.Core.Model; \ No newline at end of file +global using Yi.Framework.Core.Model; +global using Yi.Framework.Core.Exceptions; \ No newline at end of file