Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dev #48

Merged
merged 3 commits into from
Dec 7, 2024
Merged

Dev #48

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
namespace NetCorePal.D3Shop.Admin.Shared.Requests;
using System.ComponentModel.DataAnnotations;

public record AdminUserLoginRequest(string Name, string Password, bool IsPersistent);
namespace NetCorePal.D3Shop.Admin.Shared.Requests;

public class AdminUserLoginRequest
{
[Required] public string Name { get; set; } = string.Empty;

[Required] public string Password { get; set; } = string.Empty;

public bool IsPersistent { get; set; }
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
using NetCorePal.D3Shop.Domain.AggregatesModel.Identity.AdminUserAggregate.Dto;
using NetCorePal.D3Shop.Domain.AggregatesModel.Identity.RoleAggregate;
using NetCorePal.D3Shop.Domain.AggregatesModel.Identity.RoleAggregate;
using NetCorePal.Extensions.Domain;
using NetCorePal.Extensions.Primitives;

Expand All @@ -25,20 +24,20 @@ protected AdminUser()
public DateTime? DeletedAt { get; private set; }

public AdminUser(string name, string phone, string password,
IEnumerable<AssignAdminUserRoleDto> rolesToBeAssigned)
IEnumerable<AdminUserRole> roles, IEnumerable<AdminUserPermission> permissions)
{
CreatedAt = DateTime.Now;
Name = name;
Phone = phone;
Password = password;
foreach (var roleDto in rolesToBeAssigned)
foreach (var adminUserRole in roles)
{
Roles.Add(new AdminUserRole(roleDto.RoleId, roleDto.RoleName));
foreach (var rolePermission in roleDto.Permissions)
{
rolePermission.SourceRoleIds.Add(roleDto.RoleId);
Permissions.Add(rolePermission);
}
Roles.Add(adminUserRole);
}

foreach (var adminUserPermission in permissions)
{
Permissions.Add(adminUserPermission);
}
}

Expand All @@ -48,7 +47,8 @@ public void UpdateRoleInfo(RoleId roleId, string roleName)
savedRole?.UpdateRoleInfo(roleName);
}

public void UpdateRoles(IEnumerable<AssignAdminUserRoleDto> rolesToBeAssigned)
public void UpdateRoles(IEnumerable<AdminUserRole> rolesToBeAssigned,
IEnumerable<AdminUserPermission> permissions)
{
var currentRoleMap = Roles.ToDictionary(r => r.RoleId);
var targetRoleMap = rolesToBeAssigned.ToDictionary(r => r.RoleId);
Expand All @@ -64,45 +64,46 @@ public void UpdateRoles(IEnumerable<AssignAdminUserRoleDto> rolesToBeAssigned)
foreach (var roleId in roleIdsToAdd)
{
var targetRole = targetRoleMap[roleId];
Roles.Add(new AdminUserRole(roleId, targetRole.RoleName));
AddRolePermissions(roleId, targetRole.Permissions);
Roles.Add(targetRole);
}

AddPermissions(permissions);
}

public void UpdateRolePermissions(RoleId roleId, IEnumerable<AdminUserPermission> newPermissions)
{
RemoveRolePermissions(roleId);
AddRolePermissions(roleId, newPermissions);
}

private void RemoveRolePermissions(RoleId roleId)
{
foreach (var permission in Permissions.Where(p => p.SourceRoleIds.Remove(roleId)).ToArray())
{
if (permission.SourceRoleIds.Count == 0)
Permissions.Remove(permission);
}
AddPermissions(newPermissions);
}

private void AddRolePermissions(RoleId roleId, IEnumerable<AdminUserPermission> permissions)
private void AddPermissions(IEnumerable<AdminUserPermission> permissions)
{
foreach (var permission in permissions)
{
var existingPermission = Permissions.FirstOrDefault(p => p.PermissionCode == permission.PermissionCode);

if (existingPermission is null)
var existedPermission = Permissions.SingleOrDefault(p => p.PermissionCode == permission.PermissionCode);
if (existedPermission is not null)
{
var newPermission = new AdminUserPermission(permission.PermissionCode,permission.PermissionRemark);
newPermission.AddSourceRoleId(roleId);
Permissions.Add(newPermission);
foreach (var permissionSourceRoleId in permission.SourceRoleIds)
existedPermission.AddSourceRoleId(permissionSourceRoleId);
}
else
{
existingPermission.AddSourceRoleId(roleId);
Permissions.Add(permission);
}
}
}

private void RemoveRolePermissions(RoleId roleId)
{
foreach (var permission in Permissions.Where(
p => p.SourceRoleIds.Remove(roleId) &&
p.SourceRoleIds.Count == 0)
.ToArray())
{
Permissions.Remove(permission);
}
}

public void SetSpecificPermissions(IEnumerable<AdminUserPermission> permissionsToBeAssigned)
{
var currentSpecificPermissionMap =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,23 @@ namespace NetCorePal.D3Shop.Domain.AggregatesModel.Identity.AdminUserAggregate
{
public class AdminUserPermission
{
protected AdminUserPermission() { }
protected AdminUserPermission()
{
}

public AdminUserId AdminUserId { get; private set; } = default!;
public string PermissionCode { get; private set; } = string.Empty;
public string PermissionRemark { get; private set; } = string.Empty;
public List<RoleId> SourceRoleIds { get; private set; } = [];
public List<RoleId> SourceRoleIds { get; } = [];

public AdminUserPermission(string permissionCode, string permissionRemark)
public AdminUserPermission(string permissionCode, string permissionRemark, RoleId? sourceRoleId = null)
{
PermissionCode = permissionCode;
PermissionRemark = permissionRemark;
if (sourceRoleId is not null)
{
SourceRoleIds.Add(sourceRoleId);
}
}

public void AddSourceRoleId(RoleId roleId)
Expand All @@ -23,4 +29,4 @@ public void AddSourceRoleId(RoleId roleId)
SourceRoleIds.Add(roleId);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,10 @@ public partial record RoleId : IInt64StronglyTypedId;

public class Role : Entity<RoleId>, IAggregateRoot
{
protected Role() { }
protected Role()
{
}

public string Name { get; private set; } = string.Empty;
public string Description { get; private set; } = string.Empty;
public DateTime CreatedAt { get; init; }
Expand Down Expand Up @@ -48,6 +51,5 @@ public void UpdateRolePermissions(IEnumerable<RolePermission> newPermissions)

AddDomainEvent(new RolePermissionChangedDomainEvent(this));
}

}
}
}
67 changes: 0 additions & 67 deletions src/NetCorePal.D3Shop.Web.Admin.Client/Pages/Account/Login.razor

This file was deleted.

This file was deleted.

32 changes: 7 additions & 25 deletions src/NetCorePal.D3Shop.Web.Admin.Client/Pages/Roles.Razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,24 @@

namespace NetCorePal.D3Shop.Web.Admin.Client.Pages;

public sealed partial class Roles : IDisposable
public sealed partial class Roles
{
[Inject] private IRolesService RolesService { get; set; } = default!;
[Inject] private MessageService Message { get; set; } = default!;
[Inject] private ConfirmService ConfirmService { get; set; } = default!;
[Inject] private PersistentComponentState ApplicationState { get; set; } = default!;

private PersistingComponentStateSubscription _persistingSubscription;

private PagedData<RoleResponse> _pagedRoles = default!;
private PagedData<RoleResponse> _pagedRoles = new(default!, default, default, default);

private ITable _table = default!;

protected override async Task OnInitializedAsync()
{
const string persistKey = "roles";
_persistingSubscription = ApplicationState.RegisterOnPersisting(() =>
{
ApplicationState.PersistAsJson(persistKey, _pagedRoles);
return Task.CompletedTask;
});
private readonly RoleQueryRequest _roleQueryRequest = new() { CountTotal = true };

if (ApplicationState.TryTakeFromJson<PagedData<RoleResponse>>(persistKey, out var restored))
_pagedRoles = restored!;
else
await GetPagedRoles();
protected override void OnAfterRender(bool firstRender)
{
if (!firstRender) return;
_table.ReloadData(1, 10);
}

private readonly RoleQueryRequest _roleQueryRequest =
new() { PageIndex = 1, PageSize = 10, CountTotal = true };

private async Task GetPagedRoles()
{
var response = await RolesService.GetAllRoles(_roleQueryRequest);
Expand Down Expand Up @@ -85,9 +72,4 @@ private async Task Table_OnChange(QueryModel<RoleResponse> obj)
{
await GetPagedRoles();
}

public void Dispose()
{
_persistingSubscription.Dispose();
}
}
3 changes: 2 additions & 1 deletion src/NetCorePal.D3Shop.Web.Admin.Client/Pages/Users.razor
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

<Table
TItem="AdminUserResponse"
@ref="_table"
DataSource="_pagedAdminUsers.Items"
Total="_pagedAdminUsers.Total"
@bind-PageIndex="_adminUserQueryRequest.PageIndex"
Expand All @@ -25,7 +26,7 @@
<Title Level="3">用户列表</Title>
</GridCol>
<GridCol Span="8" Offset="10">
<Search Placeholder="搜索名称" @bind-Value="_searchString" OnSearch="() => OnSearch()"/>
<Search Placeholder="搜索名称" @bind-Value="_adminUserQueryRequest.Name" OnSearch="() => OnSearch()"/>
</GridCol>
<GridCol Span="2">
<AuthorizeView>
Expand Down
Loading
Loading