Skip to content

Commit

Permalink
添加配置角色权限组件
Browse files Browse the repository at this point in the history
  • Loading branch information
Zzzzjle committed Nov 18, 2024
1 parent 684c8b3 commit 28aa520
Show file tree
Hide file tree
Showing 8 changed files with 104 additions and 12 deletions.
7 changes: 0 additions & 7 deletions NetCorePal.D3Shop.Admin.Shared/Class1.cs

This file was deleted.

4 changes: 2 additions & 2 deletions NetCorePal.D3Shop.Admin.Shared/Responses/RoleResponse.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@

namespace NetCorePal.D3Shop.Admin.Shared.Responses;

public class RoleResponse(RoleId id, string name, string description, IEnumerable<RolePermission> permissions)
public class RoleResponse(RoleId id, string name, string description, IEnumerable<string> permissionCodes)
{
public RoleId Id { get; } = id;
public string Name { get; set; } = name;
public string Description { get; set; } = description;
public IEnumerable<RolePermission> Permissions { get; set; } = permissions;
public IEnumerable<string> PermissionCodes { get; set; } = permissionCodes;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
@using NetCorePal.D3Shop.Web.Admin.Client.Services
<a @onclick="ShowModal">配置权限</a>
<Modal Title="@("配置权限")"
Visible="@_modalVisible"
OnOk="Modal_HandleOk"
OnCancel="() => _modalVisible = false"
ConfirmLoading="@_modalConfirmLoading">

<Tree TItem="string"
Checkable
DefaultCheckedKeys="Row.PermissionCodes.ToArray()"
@bind-CheckedKeys="_treeCheckedKeys"
OnCheck="Tree_OnCheck">
@foreach (var group in _allPermissions.GroupBy(p => p.GroupName))
{
<TreeNode Title="@group.Key" Key="@group.Key">
@foreach (var permission in group)
{
<TreeNode Title="@permission.Remark" Key="@permission.Code"/>
}
</TreeNode>
}
</Tree>
</Modal>

@code {
[CascadingParameter] public RoleResponse Row { get; set; } = default!;
[Inject] private IRolesService RolesService { get; set; } = default!;
[Inject] private IPermissionsService PermissionsService { get; set; } = default!;

[Inject] private MessageService Message { get; set; } = default!;
private string[] _treeCheckedKeys = [];
private List<Permission> _allPermissions = [];
private List<string> _checkedPermission = [];

private bool _modalVisible;
private bool _modalConfirmLoading;

protected override void OnInitialized()
{
_checkedPermission = Row.PermissionCodes.ToList();
}

private async Task ShowModal()
{
_modalVisible = true;
_allPermissions = await GetAllPermissions();
}

private async Task<List<Permission>> GetAllPermissions()
{
var response = await PermissionsService.GetAll();
if (response.Success) return response.Data.ToList();
_ = Message.Error(response.Message);
return [];
}

private void Tree_OnCheck(TreeEventArgs<string> e)
{
_checkedPermission = _allPermissions
.Where(p => _treeCheckedKeys.Contains(p.Code))
.Select(p => p.Code).ToList();
}

private async Task Modal_HandleOk()
{
_modalConfirmLoading = true;
StateHasChanged();
var response = await RolesService.UpdateRolePermissions(Row.Id, _checkedPermission);
_modalConfirmLoading = false;
if (response.Success)
{
_modalVisible = false;
_ = Message.Success("更新成功!");
Row.PermissionCodes = _checkedPermission;
}
else
{
_ = Message.Error(response.Message);
}
}

}
8 changes: 8 additions & 0 deletions src/NetCorePal.D3Shop.Web.Admin.Client/Pages/Roles.razor
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,14 @@
</CascadingValue>
}
</AuthorizeView>
<AuthorizeView>
@if (context.CheckPermission(PermissionDefinitions.RoleUpdatePermissions))
{
<CascadingValue Value="@row">
<EditRolePermissions></EditRolePermissions>
</CascadingValue>
}
</AuthorizeView>
<a>Delete</a>
</ActionColumn>
</ColumnDefinitions>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@ public interface IRolesService
[Put("/api/Role/UpdateRoleInfo/{id}")]
Task<ResponseData> UpdateRoleInfo(RoleId id, [Body] UpdateRoleInfoRequest request);

[Put("/api/Role/UpdateRolePermissions/{id}")]
Task<ResponseData> UpdateRolePermissions(RoleId id, [Body] List<string> permissionCodes);

[Get("/api/Role/GetRolesByCondition")]
Task<ResponseData<IEnumerable<RoleResponse>>> GetRolesByCondition([Query] RoleQueryRequest request);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ public class RoleToRoleResponse : IMapper<Role, RoleResponse>
{
public RoleResponse To(Role from)
{
return new RoleResponse(from.Id, from.Name, from.Description, from.Permissions);
return new RoleResponse(from.Id, from.Name, from.Description, from.Permissions.Select(p => p.PermissionCode));
}
}
5 changes: 5 additions & 0 deletions src/NetCorePal.D3Shop.Web/Blazor/Services/RolesService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@ public async Task<ResponseData> UpdateRoleInfo(RoleId id, UpdateRoleInfoRequest
return await roleController.UpdateRoleInfo(id, request);
}

public async Task<ResponseData> UpdateRolePermissions(RoleId id, List<string> permissionCodes)
{
return await roleController.UpdateRolePermissions(id, permissionCodes);
}

public async Task<ResponseData<IEnumerable<RoleResponse>>> GetRolesByCondition(
RoleQueryRequest request)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ public async Task UpdateRolePermission_Test()
getRoleResponse.EnsureSuccessStatusCode();
var roleData = await getRoleResponse.Content.ReadFromNewtonsoftJsonAsync<ResponseData<RoleResponse>>();
Assert.NotNull(roleData);
Assert.Equal(permissionCodes.OrderBy(p => p), roleData.Data.Permissions.Select(p => p.PermissionCode).OrderBy(p => p));
Assert.Equal(permissionCodes.OrderBy(p => p), roleData.Data.PermissionCodes.OrderBy(p => p));

permissionCodes = Permissions.AllPermissions.TakeLast(2).Select(p => p.Code).ToList();
var updateResponse = await _client.PutAsNewtonsoftJsonAsync($"/api/Role/UpdateRolePermissions/{testRoleId}", permissionCodes);
Expand All @@ -197,7 +197,7 @@ public async Task UpdateRolePermission_Test()
getRoleResponse.EnsureSuccessStatusCode();
roleData = await getRoleResponse.Content.ReadFromNewtonsoftJsonAsync<ResponseData<RoleResponse>>();
Assert.NotNull(roleData);
Assert.Equal(permissionCodes.OrderBy(p => p), roleData.Data.Permissions.Select(p => p.PermissionCode).OrderBy(p => p));
Assert.Equal(permissionCodes.OrderBy(p => p), roleData.Data.PermissionCodes.OrderBy(p => p));

//验证关联用户的权限
var getUserResponse = await _client.GetAsync($"/api/AdminUser/GetAdminUserById/{testUserId}");
Expand Down

0 comments on commit 28aa520

Please sign in to comment.