From 5ec918a2f95ead7d44a55f19ca4d34d227c36b50 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 6 Nov 2025 02:04:11 +0000 Subject: [PATCH] Add role-based authorization entities, repositories and UI pages Co-authored-by: xuzeyu91 <26290929+xuzeyu91@users.noreply.github.com> --- src/AntSK.Domain/AntSK.Domain.xml | 120 ++++++++++++++++++ .../DependencyInjection/InitExtensions.cs | 87 +++++++++++++ .../Permission/IPermissions_Repositories.cs | 8 ++ .../Setting/Permission/Permissions.cs | 46 +++++++ .../Permission/Permissions_Repositories.cs | 10 ++ .../Setting/Role/IRoles_Repositories.cs | 8 ++ .../Repositories/Setting/Role/Roles.cs | 45 +++++++ .../Setting/Role/Roles_Repositories.cs | 10 ++ .../IRolePermissions_Repositories.cs | 8 ++ .../Setting/RolePermission/RolePermissions.cs | 32 +++++ .../RolePermissions_Repositories.cs | 10 ++ .../UserRole/IUserRoles_Repositories.cs | 8 ++ .../Setting/UserRole/UserRoles.cs | 32 +++++ .../UserRole/UserRoles_Repositories.cs | 10 ++ src/AntSK/Models/UserSession.cs | 2 + src/AntSK/Pages/Setting/Role/AddRole.razor | 61 +++++++++ src/AntSK/Pages/Setting/Role/AddRole.razor.cs | 103 +++++++++++++++ src/AntSK/Pages/Setting/Role/RoleList.razor | 72 +++++++++++ .../Pages/Setting/Role/RoleList.razor.cs | 84 ++++++++++++ src/AntSK/Pages/Setting/User/AddUser.razor | 16 +++ src/AntSK/Pages/Setting/User/AddUser.razor.cs | 50 ++++++++ src/AntSK/Services/Auth/AntSKAuthProvider.cs | 76 +++++++++-- 22 files changed, 887 insertions(+), 11 deletions(-) create mode 100644 src/AntSK.Domain/Repositories/Setting/Permission/IPermissions_Repositories.cs create mode 100644 src/AntSK.Domain/Repositories/Setting/Permission/Permissions.cs create mode 100644 src/AntSK.Domain/Repositories/Setting/Permission/Permissions_Repositories.cs create mode 100644 src/AntSK.Domain/Repositories/Setting/Role/IRoles_Repositories.cs create mode 100644 src/AntSK.Domain/Repositories/Setting/Role/Roles.cs create mode 100644 src/AntSK.Domain/Repositories/Setting/Role/Roles_Repositories.cs create mode 100644 src/AntSK.Domain/Repositories/Setting/RolePermission/IRolePermissions_Repositories.cs create mode 100644 src/AntSK.Domain/Repositories/Setting/RolePermission/RolePermissions.cs create mode 100644 src/AntSK.Domain/Repositories/Setting/RolePermission/RolePermissions_Repositories.cs create mode 100644 src/AntSK.Domain/Repositories/Setting/UserRole/IUserRoles_Repositories.cs create mode 100644 src/AntSK.Domain/Repositories/Setting/UserRole/UserRoles.cs create mode 100644 src/AntSK.Domain/Repositories/Setting/UserRole/UserRoles_Repositories.cs create mode 100644 src/AntSK/Pages/Setting/Role/AddRole.razor create mode 100644 src/AntSK/Pages/Setting/Role/AddRole.razor.cs create mode 100644 src/AntSK/Pages/Setting/Role/RoleList.razor create mode 100644 src/AntSK/Pages/Setting/Role/RoleList.razor.cs diff --git a/src/AntSK.Domain/AntSK.Domain.xml b/src/AntSK.Domain/AntSK.Domain.xml index 5839d84..f58ab5f 100644 --- a/src/AntSK.Domain/AntSK.Domain.xml +++ b/src/AntSK.Domain/AntSK.Domain.xml @@ -836,6 +836,101 @@ 部署名,azure需要使用 + + + 权限表 + + + + + 权限ID + + + + + 权限名称 + + + + + 权限编码 + + + + + 权限类型(Menu-菜单权限, Operation-操作权限) + + + + + 权限描述 + + + + + 创建时间 + + + + + 角色表 + + + + + 角色ID + + + + + 角色名称 + + + + + 角色编码 + + + + + 角色描述 + + + + + 是否启用 + + + + + 创建时间 + + + + + 角色权限关联表 + + + + + 关联ID + + + + + 角色ID + + + + + 权限ID + + + + + 创建时间 + + 工号,用于登陆 @@ -861,6 +956,31 @@ 菜单权限 + + + 用户角色关联表 + + + + + 关联ID + + + + + 用户ID + + + + + 角色ID + + + + + 创建时间 + + 判断是否为空,为空返回true diff --git a/src/AntSK.Domain/Common/DependencyInjection/InitExtensions.cs b/src/AntSK.Domain/Common/DependencyInjection/InitExtensions.cs index 4a49eec..7783614 100644 --- a/src/AntSK.Domain/Common/DependencyInjection/InitExtensions.cs +++ b/src/AntSK.Domain/Common/DependencyInjection/InitExtensions.cs @@ -81,10 +81,97 @@ namespace AntSK.Domain.Common.DependencyInjection llamafactoryStart.Value = "false"; _dic_Repository.Insert(llamafactoryStart); } + + // 初始化角色和权限 + InitRolesAndPermissions(scope.ServiceProvider); + _logger.LogInformation("初始化数据库初始数据完成"); } return app; } + + private static void InitRolesAndPermissions(IServiceProvider serviceProvider) + { + var _roles_Repository = serviceProvider.GetRequiredService(); + var _permissions_Repository = serviceProvider.GetRequiredService(); + var _rolePermissions_Repository = serviceProvider.GetRequiredService(); + + // 检查是否已经初始化 + if (_roles_Repository.IsAny(r => r.Code == "Admin")) + { + return; + } + + // 创建管理员角色 + var adminRole = new Roles + { + Id = Guid.NewGuid().ToString(), + Name = "管理员", + Code = "Admin", + Description = "系统管理员,拥有所有权限", + IsEnabled = true, + CreateTime = DateTime.Now + }; + _roles_Repository.Insert(adminRole); + + // 创建普通用户角色 + var userRole = new Roles + { + Id = Guid.NewGuid().ToString(), + Name = "普通用户", + Code = "User", + Description = "普通用户,拥有基本功能权限", + IsEnabled = true, + CreateTime = DateTime.Now + }; + _roles_Repository.Insert(userRole); + + // 创建菜单权限 + var menuPermissions = new List + { + new Permissions { Id = Guid.NewGuid().ToString(), Name = "聊天", Code = "chat", Type = "Menu", Description = "聊天功能权限" }, + new Permissions { Id = Guid.NewGuid().ToString(), Name = "应用", Code = "app", Type = "Menu", Description = "应用管理权限" }, + new Permissions { Id = Guid.NewGuid().ToString(), Name = "知识库", Code = "kms", Type = "Menu", Description = "知识库管理权限" }, + new Permissions { Id = Guid.NewGuid().ToString(), Name = "API管理", Code = "plugins.apilist", Type = "Menu", Description = "API管理权限" }, + new Permissions { Id = Guid.NewGuid().ToString(), Name = "函数管理", Code = "plugins.funlist", Type = "Menu", Description = "函数管理权限" }, + new Permissions { Id = Guid.NewGuid().ToString(), Name = "模型管理", Code = "modelmanager.modellist", Type = "Menu", Description = "模型管理权限" }, + new Permissions { Id = Guid.NewGuid().ToString(), Name = "用户管理", Code = "setting.user", Type = "Menu", Description = "用户管理权限" }, + new Permissions { Id = Guid.NewGuid().ToString(), Name = "聊天记录", Code = "setting.chathistory", Type = "Menu", Description = "聊天记录权限" }, + new Permissions { Id = Guid.NewGuid().ToString(), Name = "删除向量表", Code = "setting.delkms", Type = "Menu", Description = "删除向量表权限" } + }; + + foreach (var permission in menuPermissions) + { + _permissions_Repository.Insert(permission); + } + + // 为管理员角色分配所有权限 + foreach (var permission in menuPermissions) + { + _rolePermissions_Repository.Insert(new RolePermissions + { + Id = Guid.NewGuid().ToString(), + RoleId = adminRole.Id, + PermissionId = permission.Id, + CreateTime = DateTime.Now + }); + } + + // 为普通用户角色分配基本权限(聊天、应用、知识库) + var basicPermissions = menuPermissions.Where(p => p.Code == "chat" || p.Code == "app" || p.Code == "kms").ToList(); + foreach (var permission in basicPermissions) + { + _rolePermissions_Repository.Insert(new RolePermissions + { + Id = Guid.NewGuid().ToString(), + RoleId = userRole.Id, + PermissionId = permission.Id, + CreateTime = DateTime.Now + }); + } + + _logger.LogInformation("初始化角色和权限完成"); + } /// /// 加载数据库的插件 /// diff --git a/src/AntSK.Domain/Repositories/Setting/Permission/IPermissions_Repositories.cs b/src/AntSK.Domain/Repositories/Setting/Permission/IPermissions_Repositories.cs new file mode 100644 index 0000000..3f89833 --- /dev/null +++ b/src/AntSK.Domain/Repositories/Setting/Permission/IPermissions_Repositories.cs @@ -0,0 +1,8 @@ +using AntSK.Domain.Repositories.Base; + +namespace AntSK.Domain.Repositories +{ + public interface IPermissions_Repositories : IRepository + { + } +} diff --git a/src/AntSK.Domain/Repositories/Setting/Permission/Permissions.cs b/src/AntSK.Domain/Repositories/Setting/Permission/Permissions.cs new file mode 100644 index 0000000..de3812b --- /dev/null +++ b/src/AntSK.Domain/Repositories/Setting/Permission/Permissions.cs @@ -0,0 +1,46 @@ +using SqlSugar; +using System.ComponentModel.DataAnnotations; + +namespace AntSK.Domain.Repositories +{ + /// + /// 权限表 + /// + [SugarTable("Permissions")] + public partial class Permissions + { + /// + /// 权限ID + /// + [SugarColumn(IsPrimaryKey = true)] + public string Id { get; set; } + + /// + /// 权限名称 + /// + [Required] + public string Name { get; set; } + + /// + /// 权限编码 + /// + [Required] + public string Code { get; set; } + + /// + /// 权限类型(Menu-菜单权限, Operation-操作权限) + /// + [Required] + public string Type { get; set; } + + /// + /// 权限描述 + /// + public string? Description { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } = DateTime.Now; + } +} diff --git a/src/AntSK.Domain/Repositories/Setting/Permission/Permissions_Repositories.cs b/src/AntSK.Domain/Repositories/Setting/Permission/Permissions_Repositories.cs new file mode 100644 index 0000000..a780c78 --- /dev/null +++ b/src/AntSK.Domain/Repositories/Setting/Permission/Permissions_Repositories.cs @@ -0,0 +1,10 @@ +using AntSK.Domain.Common.DependencyInjection; +using AntSK.Domain.Repositories.Base; + +namespace AntSK.Domain.Repositories +{ + [ServiceDescription(typeof(IPermissions_Repositories), ServiceLifetime.Scoped)] + public class Permissions_Repositories : Repository, IPermissions_Repositories + { + } +} diff --git a/src/AntSK.Domain/Repositories/Setting/Role/IRoles_Repositories.cs b/src/AntSK.Domain/Repositories/Setting/Role/IRoles_Repositories.cs new file mode 100644 index 0000000..76be31b --- /dev/null +++ b/src/AntSK.Domain/Repositories/Setting/Role/IRoles_Repositories.cs @@ -0,0 +1,8 @@ +using AntSK.Domain.Repositories.Base; + +namespace AntSK.Domain.Repositories +{ + public interface IRoles_Repositories : IRepository + { + } +} diff --git a/src/AntSK.Domain/Repositories/Setting/Role/Roles.cs b/src/AntSK.Domain/Repositories/Setting/Role/Roles.cs new file mode 100644 index 0000000..65c72fd --- /dev/null +++ b/src/AntSK.Domain/Repositories/Setting/Role/Roles.cs @@ -0,0 +1,45 @@ +using SqlSugar; +using System.ComponentModel.DataAnnotations; + +namespace AntSK.Domain.Repositories +{ + /// + /// 角色表 + /// + [SugarTable("Roles")] + public partial class Roles + { + /// + /// 角色ID + /// + [SugarColumn(IsPrimaryKey = true)] + public string Id { get; set; } + + /// + /// 角色名称 + /// + [Required] + public string Name { get; set; } + + /// + /// 角色编码 + /// + [Required] + public string Code { get; set; } + + /// + /// 角色描述 + /// + public string? Description { get; set; } + + /// + /// 是否启用 + /// + public bool IsEnabled { get; set; } = true; + + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } = DateTime.Now; + } +} diff --git a/src/AntSK.Domain/Repositories/Setting/Role/Roles_Repositories.cs b/src/AntSK.Domain/Repositories/Setting/Role/Roles_Repositories.cs new file mode 100644 index 0000000..0670279 --- /dev/null +++ b/src/AntSK.Domain/Repositories/Setting/Role/Roles_Repositories.cs @@ -0,0 +1,10 @@ +using AntSK.Domain.Common.DependencyInjection; +using AntSK.Domain.Repositories.Base; + +namespace AntSK.Domain.Repositories +{ + [ServiceDescription(typeof(IRoles_Repositories), ServiceLifetime.Scoped)] + public class Roles_Repositories : Repository, IRoles_Repositories + { + } +} diff --git a/src/AntSK.Domain/Repositories/Setting/RolePermission/IRolePermissions_Repositories.cs b/src/AntSK.Domain/Repositories/Setting/RolePermission/IRolePermissions_Repositories.cs new file mode 100644 index 0000000..692e1e8 --- /dev/null +++ b/src/AntSK.Domain/Repositories/Setting/RolePermission/IRolePermissions_Repositories.cs @@ -0,0 +1,8 @@ +using AntSK.Domain.Repositories.Base; + +namespace AntSK.Domain.Repositories +{ + public interface IRolePermissions_Repositories : IRepository + { + } +} diff --git a/src/AntSK.Domain/Repositories/Setting/RolePermission/RolePermissions.cs b/src/AntSK.Domain/Repositories/Setting/RolePermission/RolePermissions.cs new file mode 100644 index 0000000..a2bb891 --- /dev/null +++ b/src/AntSK.Domain/Repositories/Setting/RolePermission/RolePermissions.cs @@ -0,0 +1,32 @@ +using SqlSugar; + +namespace AntSK.Domain.Repositories +{ + /// + /// 角色权限关联表 + /// + [SugarTable("RolePermissions")] + public partial class RolePermissions + { + /// + /// 关联ID + /// + [SugarColumn(IsPrimaryKey = true)] + public string Id { get; set; } + + /// + /// 角色ID + /// + public string RoleId { get; set; } + + /// + /// 权限ID + /// + public string PermissionId { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } = DateTime.Now; + } +} diff --git a/src/AntSK.Domain/Repositories/Setting/RolePermission/RolePermissions_Repositories.cs b/src/AntSK.Domain/Repositories/Setting/RolePermission/RolePermissions_Repositories.cs new file mode 100644 index 0000000..ff2e42f --- /dev/null +++ b/src/AntSK.Domain/Repositories/Setting/RolePermission/RolePermissions_Repositories.cs @@ -0,0 +1,10 @@ +using AntSK.Domain.Common.DependencyInjection; +using AntSK.Domain.Repositories.Base; + +namespace AntSK.Domain.Repositories +{ + [ServiceDescription(typeof(IRolePermissions_Repositories), ServiceLifetime.Scoped)] + public class RolePermissions_Repositories : Repository, IRolePermissions_Repositories + { + } +} diff --git a/src/AntSK.Domain/Repositories/Setting/UserRole/IUserRoles_Repositories.cs b/src/AntSK.Domain/Repositories/Setting/UserRole/IUserRoles_Repositories.cs new file mode 100644 index 0000000..89955d0 --- /dev/null +++ b/src/AntSK.Domain/Repositories/Setting/UserRole/IUserRoles_Repositories.cs @@ -0,0 +1,8 @@ +using AntSK.Domain.Repositories.Base; + +namespace AntSK.Domain.Repositories +{ + public interface IUserRoles_Repositories : IRepository + { + } +} diff --git a/src/AntSK.Domain/Repositories/Setting/UserRole/UserRoles.cs b/src/AntSK.Domain/Repositories/Setting/UserRole/UserRoles.cs new file mode 100644 index 0000000..85ac6d2 --- /dev/null +++ b/src/AntSK.Domain/Repositories/Setting/UserRole/UserRoles.cs @@ -0,0 +1,32 @@ +using SqlSugar; + +namespace AntSK.Domain.Repositories +{ + /// + /// 用户角色关联表 + /// + [SugarTable("UserRoles")] + public partial class UserRoles + { + /// + /// 关联ID + /// + [SugarColumn(IsPrimaryKey = true)] + public string Id { get; set; } + + /// + /// 用户ID + /// + public string UserId { get; set; } + + /// + /// 角色ID + /// + public string RoleId { get; set; } + + /// + /// 创建时间 + /// + public DateTime CreateTime { get; set; } = DateTime.Now; + } +} diff --git a/src/AntSK.Domain/Repositories/Setting/UserRole/UserRoles_Repositories.cs b/src/AntSK.Domain/Repositories/Setting/UserRole/UserRoles_Repositories.cs new file mode 100644 index 0000000..c3921df --- /dev/null +++ b/src/AntSK.Domain/Repositories/Setting/UserRole/UserRoles_Repositories.cs @@ -0,0 +1,10 @@ +using AntSK.Domain.Common.DependencyInjection; +using AntSK.Domain.Repositories.Base; + +namespace AntSK.Domain.Repositories +{ + [ServiceDescription(typeof(IUserRoles_Repositories), ServiceLifetime.Scoped)] + public class UserRoles_Repositories : Repository, IUserRoles_Repositories + { + } +} diff --git a/src/AntSK/Models/UserSession.cs b/src/AntSK/Models/UserSession.cs index a3370fb..ac60137 100644 --- a/src/AntSK/Models/UserSession.cs +++ b/src/AntSK/Models/UserSession.cs @@ -4,5 +4,7 @@ { public string UserName { get; set; } public string Role { get; set; } + public List? Roles { get; set; } + public List? Permissions { get; set; } } } diff --git a/src/AntSK/Pages/Setting/Role/AddRole.razor b/src/AntSK/Pages/Setting/Role/AddRole.razor new file mode 100644 index 0000000..64c1bee --- /dev/null +++ b/src/AntSK/Pages/Setting/Role/AddRole.razor @@ -0,0 +1,61 @@ +@namespace AntSK.Pages.Setting.Role +@using AntSK.Domain.Repositories +@using AntSK.Models +@page "/setting/role/add" +@page "/setting/role/add/{RoleId}" +@using AntSK.Services.Auth +@inherits AuthComponentBase +@using Microsoft.AspNetCore.Authorization +@attribute [Authorize(Roles = "AntSKAdmin")] + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+
+
+
+ +@code { + +} diff --git a/src/AntSK/Pages/Setting/Role/AddRole.razor.cs b/src/AntSK/Pages/Setting/Role/AddRole.razor.cs new file mode 100644 index 0000000..7bd591f --- /dev/null +++ b/src/AntSK/Pages/Setting/Role/AddRole.razor.cs @@ -0,0 +1,103 @@ +using AntDesign; +using AntSK.Domain.Repositories; +using Microsoft.AspNetCore.Components; + +namespace AntSK.Pages.Setting.Role +{ + public partial class AddRole + { + [Parameter] + public string RoleId { get; set; } + [Inject] protected IRoles_Repositories _roles_Repositories { get; set; } + [Inject] protected IPermissions_Repositories _permissions_Repositories { get; set; } + [Inject] protected IRolePermissions_Repositories _rolePermissions_Repositories { get; set; } + [Inject] protected MessageService? Message { get; set; } + + private Roles _roleModel = new Roles(); + private List _allPermissions = new List(); + private IEnumerable _permissionIds; + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + + // 加载所有权限 + _allPermissions = _permissions_Repositories.GetList(); + + if (!string.IsNullOrEmpty(RoleId)) + { + _roleModel = _roles_Repositories.GetFirst(p => p.Id == RoleId); + + // 加载角色已有的权限 + var rolePermissions = _rolePermissions_Repositories.GetList(p => p.RoleId == RoleId); + _permissionIds = rolePermissions.Select(rp => rp.PermissionId); + } + } + + private void HandleSubmit() + { + if (string.IsNullOrEmpty(RoleId)) + { + //新增 + _roleModel.Id = Guid.NewGuid().ToString(); + _roleModel.CreateTime = DateTime.Now; + + if (_roles_Repositories.IsAny(p => p.Code == _roleModel.Code)) + { + _ = Message.Error("角色编码已存在!", 2); + return; + } + _roles_Repositories.Insert(_roleModel); + + // 添加角色权限关联 + if (_permissionIds != null) + { + foreach (var permissionId in _permissionIds) + { + _rolePermissions_Repositories.Insert(new RolePermissions + { + Id = Guid.NewGuid().ToString(), + RoleId = _roleModel.Id, + PermissionId = permissionId, + CreateTime = DateTime.Now + }); + } + } + } + else + { + //修改 + _roles_Repositories.Update(_roleModel); + + // 先删除旧的角色权限关联 + var oldRolePermissions = _rolePermissions_Repositories.GetList(p => p.RoleId == RoleId); + foreach (var rp in oldRolePermissions) + { + _rolePermissions_Repositories.Delete(rp.Id); + } + + // 添加新的角色权限关联 + if (_permissionIds != null) + { + foreach (var permissionId in _permissionIds) + { + _rolePermissions_Repositories.Insert(new RolePermissions + { + Id = Guid.NewGuid().ToString(), + RoleId = _roleModel.Id, + PermissionId = permissionId, + CreateTime = DateTime.Now + }); + } + } + } + + Back(); + } + + private void Back() + { + NavigationManager.NavigateTo("/setting/rolelist"); + } + } +} diff --git a/src/AntSK/Pages/Setting/Role/RoleList.razor b/src/AntSK/Pages/Setting/Role/RoleList.razor new file mode 100644 index 0000000..035b158 --- /dev/null +++ b/src/AntSK/Pages/Setting/Role/RoleList.razor @@ -0,0 +1,72 @@ +@namespace AntSK.Pages.Setting.Role +@using AntSK.Domain.Repositories +@page "/setting/rolelist" +@inject NavigationManager NavigationManager +@using AntSK.Services.Auth +@inherits AuthComponentBase +@using Microsoft.AspNetCore.Authorization +@attribute [Authorize(Roles = "AntSKAdmin")] + +
+ + +
+ + + +
+ + +
+
+ + + + + +
+
+ 角色名称 +

@context.Name

+
+
+ 角色编码 +

@context.Code

+
+
+ 描述 +

@context.Description

+
+
+ 状态 +

@(context.IsEnabled ? "启用" : "禁用")

+
+
+
+
+
+
+
+
+
+
+ +@code +{ + RenderFragment edit(Action clickAction) =>@修改; + RenderFragment delete(Action clickAction) =>@删除; + +} diff --git a/src/AntSK/Pages/Setting/Role/RoleList.razor.cs b/src/AntSK/Pages/Setting/Role/RoleList.razor.cs new file mode 100644 index 0000000..a199a34 --- /dev/null +++ b/src/AntSK/Pages/Setting/Role/RoleList.razor.cs @@ -0,0 +1,84 @@ +using AntDesign; +using AntSK.Domain.Repositories; +using AntSK.Models; +using Microsoft.AspNetCore.Components; + +namespace AntSK.Pages.Setting.Role +{ + public partial class RoleList + { + private readonly BasicListFormModel _model = new BasicListFormModel(); + + private List _data; + + private string _searchKeyword; + + [Inject] + protected IRoles_Repositories _roles_Repositories { get; set; } + [Inject] + protected IRolePermissions_Repositories _rolePermissions_Repositories { get; set; } + [Inject] + protected IUserRoles_Repositories _userRoles_Repositories { get; set; } + [Inject] + IConfirmService _confirmService { get; set; } + + protected override async Task OnInitializedAsync() + { + await base.OnInitializedAsync(); + await InitData(); + } + private async Task InitData(string searchKey = null) + { + if (string.IsNullOrEmpty(searchKey)) + { + _data = _roles_Repositories.GetList(); + } + else + { + _data = _roles_Repositories.GetList(p => p.Name.Contains(searchKey) || p.Code.Contains(searchKey) || (p.Description != null && p.Description.Contains(searchKey))); + } + await InvokeAsync(StateHasChanged); + } + public async Task OnSearch() + { + await InitData(_searchKeyword); + } + + public async Task AddRole() + { + NavigationManager.NavigateTo("/setting/role/add"); + } + + public void Edit(string roleid) + { + NavigationManager.NavigateTo("/setting/role/add/" + roleid); + } + + public async Task Delete(string roleid) + { + var content = "是否确认删除此角色"; + var title = "删除"; + var result = await _confirmService.Show(content, title, ConfirmButtons.YesNo); + if (result == ConfirmResult.Yes) + { + // 删除角色权限关联 + var rolePerms = _rolePermissions_Repositories.GetList(p => p.RoleId == roleid); + foreach (var rp in rolePerms) + { + await _rolePermissions_Repositories.DeleteAsync(rp.Id); + } + + // 删除用户角色关联 + var userRoles = _userRoles_Repositories.GetList(p => p.RoleId == roleid); + foreach (var ur in userRoles) + { + await _userRoles_Repositories.DeleteAsync(ur.Id); + } + + // 删除角色 + await _roles_Repositories.DeleteAsync(roleid); + await InitData(""); + } + } + } +} diff --git a/src/AntSK/Pages/Setting/User/AddUser.razor b/src/AntSK/Pages/Setting/User/AddUser.razor index 640b7ac..7df12a2 100644 --- a/src/AntSK/Pages/Setting/User/AddUser.razor +++ b/src/AntSK/Pages/Setting/User/AddUser.razor @@ -43,6 +43,22 @@ + + + +