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

Cleanup Identity #443

Merged
merged 18 commits into from
Feb 9, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Next Next commit
Cleanup Identity
* re-design permissions
* consistency
* rename IIdentityService to IProfileService
* rename StatsController to DashboardController
* remove roleclaimscontroller
* add personalController and move myauditlogs and mypermissions there
* move FSHRoles to shared project
* remove isdefault from roledto
  • Loading branch information
fretje committed Feb 6, 2022
commit ece953bbcd66ea5d9755c8ee86cd8399c89734ae
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
namespace FSH.WebApi.Application.Identity.Roles;

public class RoleRequest
public class CreateOrUpdateRoleRequest
{
public string? Id { get; set; }
public string Name { get; set; } = default!;
public string? Description { get; set; }
}

public class RoleRequestValidator : CustomValidator<RoleRequest>
public class CreateOrUpdateRoleRequestValidator : CustomValidator<CreateOrUpdateRoleRequest>
{
public RoleRequestValidator(IRoleService roleService, IStringLocalizer<RoleRequestValidator> localizer)
{
public CreateOrUpdateRoleRequestValidator(IRoleService roleService, IStringLocalizer<CreateOrUpdateRoleRequestValidator> localizer) =>
RuleFor(r => r.Name)
.NotEmpty()
.MustAsync(async (role, name, _) => !await roleService.ExistsAsync(name, role.Id))
.WithMessage(localizer["Similar Role already exists."]);
}
}
6 changes: 3 additions & 3 deletions src/Core/Application/Identity/Roles/IRoleService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ namespace FSH.WebApi.Application.Identity.Roles;

public interface IRoleService : ITransientService
{
Task<List<RoleDto>> GetListAsync();
Task<List<RoleDto>> GetListAsync(CancellationToken cancellationToken);

Task<int> GetCountAsync(CancellationToken cancellationToken);

Expand All @@ -12,9 +12,9 @@ public interface IRoleService : ITransientService

Task<RoleDto> GetByIdWithPermissionsAsync(string roleId, CancellationToken cancellationToken);

Task<string> RegisterRoleAsync(RoleRequest request);
Task<string> CreateOrUpdateAsync(CreateOrUpdateRoleRequest request);

Task<string> UpdatePermissionsAsync(UpdatePermissionsRequest request, CancellationToken cancellationToken);
Task<string> UpdatePermissionsAsync(UpdateRolePermissionsRequest request, CancellationToken cancellationToken);

Task<string> DeleteAsync(string id);
}
8 changes: 0 additions & 8 deletions src/Core/Application/Identity/Roles/PermissionDto.cs

This file was deleted.

4 changes: 1 addition & 3 deletions src/Core/Application/Identity/Roles/RoleDto.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,5 @@ public class RoleDto
public string Id { get; set; } = default!;
public string Name { get; set; } = default!;
public string? Description { get; set; }
public bool IsDefault { get; set; }
public bool IsRootRole { get; set; } = false;
public List<PermissionDto>? Permissions { get; set; }
public List<string>? Permissions { get; set; }
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
namespace FSH.WebApi.Application.Identity.Roles;

public class UpdatePermissionsRequest
public class UpdateRolePermissionsRequest
{
public string RoleId { get; set; } = default!;
public List<string> Permissions { get; set; } = default!;
}

public class UpdatePermissionsRequestValidator : CustomValidator<UpdatePermissionsRequest>
public class UpdateRolePermissionsRequestValidator : CustomValidator<UpdateRolePermissionsRequest>
{
public UpdatePermissionsRequestValidator()
public UpdateRolePermissionsRequestValidator()
{
RuleFor(r => r.RoleId)
.NotEmpty();
Expand Down
12 changes: 12 additions & 0 deletions src/Core/Application/Identity/Users/CreateProfileRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
namespace FSH.WebApi.Application.Identity.Users;

public class CreateProfileRequest
{
public string FirstName { get; set; } = default!;
public string LastName { get; set; } = default!;
public string Email { get; set; } = default!;
public string UserName { get; set; } = default!;
public string Password { get; set; } = default!;
public string ConfirmPassword { get; set; } = default!;
public string? PhoneNumber { get; set; }
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
namespace FSH.WebApi.Application.Identity.Users;

public class RegisterUserRequestValidator : CustomValidator<RegisterUserRequest>
public class CreateProfileRequestValidator : CustomValidator<CreateProfileRequest>
{
public RegisterUserRequestValidator(IUserService userService, IStringLocalizer<RegisterUserRequestValidator> localizer)
public CreateProfileRequestValidator(IUserService userService, IStringLocalizer<CreateProfileRequestValidator> localizer)
{
RuleFor(u => u.Email).Cascade(CascadeMode.Stop)
.NotEmpty()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@

namespace FSH.WebApi.Application.Identity.Users;

public interface IIdentityService : ITransientService
public interface IProfileService : ITransientService
{
Task<string> GetOrCreateFromPrincipalAsync(ClaimsPrincipal principal);

Task<string> RegisterAsync(RegisterUserRequest request, string origin);
Task<string> CreateAsync(CreateProfileRequest request, string origin);

Task UpdateAsync(UpdateProfileRequest request, string userId);

Task<string> ConfirmEmailAsync(string userId, string code, string tenant, CancellationToken cancellationToken);

Expand All @@ -16,7 +18,5 @@ public interface IIdentityService : ITransientService

Task<string> ResetPasswordAsync(ResetPasswordRequest request);

Task UpdateProfileAsync(UpdateProfileRequest request, string userId);

Task ChangePasswordAsync(ChangePasswordRequest request, string userId);
}
4 changes: 1 addition & 3 deletions src/Core/Application/Identity/Users/IUserService.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
using FSH.WebApi.Application.Identity.Roles;

namespace FSH.WebApi.Application.Identity.Users;

public interface IUserService : ITransientService
Expand All @@ -20,7 +18,7 @@ public interface IUserService : ITransientService

Task<string> AssignRolesAsync(string userId, UserRolesRequest request, CancellationToken cancellationToken);

Task<List<PermissionDto>> GetPermissionsAsync(string id, CancellationToken cancellationToken);
Task<List<string>> GetPermissionsAsync(string userId, CancellationToken cancellationToken);

Task ToggleUserStatusAsync(ToggleUserStatusRequest request, CancellationToken cancellationToken);
}
12 changes: 0 additions & 12 deletions src/Core/Application/Identity/Users/RegisterUserRequest.cs

This file was deleted.

33 changes: 0 additions & 33 deletions src/Core/Shared/Authorization/FSHBasicPermissions.cs

This file was deleted.

150 changes: 69 additions & 81 deletions src/Core/Shared/Authorization/FSHPermissions.cs
Original file line number Diff line number Diff line change
@@ -1,91 +1,79 @@
using System.ComponentModel;
using System.Collections.ObjectModel;

namespace FSH.WebApi.Shared.Authorization;

public class FSHPermissions
public static class FSHAction
{
[DisplayName("Dashboard")]
[Description("Dashboard Permissions")]
public static class Dashboard
{
public const string View = "Permissions.Dashboard.View";
}

[DisplayName("AuditLogs")]
[Description("AuditLogs Permissions")]
public static class AuditLogs
{
public const string View = "Permissions.AuditLogs.View";
}

[DisplayName("Hangfire")]
[Description("Hangfire Permissions")]
public static class Hangfire
{
public const string View = "Permissions.Hangfire.View";
}

[DisplayName("Identity")]
[Description("Identity Permissions")]
public static class Identity
{
public const string Create = "Permissions.Identity.Create";
}
public const string View = nameof(View);
public const string Search = nameof(Search);
public const string Create = nameof(Create);
public const string Update = nameof(Update);
public const string Delete = nameof(Delete);
public const string Export = nameof(Export);
public const string Generate = nameof(Generate);
public const string Clean = nameof(Clean);
public const string UpgradeSubscription = nameof(UpgradeSubscription);
}

[DisplayName("Users")]
[Description("Users Permissions")]
public static class Users
{
public const string View = "Permissions.Users.View";
public const string Create = "Permissions.Users.Create";
public const string Update = "Permissions.Users.Update";
public const string Delete = "Permissions.Users.Delete";
public const string Export = "Permissions.Users.Export";
public const string Search = "Permissions.Users.Search";
}
public static class FSHResource
{
public const string Tenants = nameof(Tenants);
public const string Dashboard = nameof(Dashboard);
public const string Hangfire = nameof(Hangfire);
public const string Users = nameof(Users);
public const string UserRoles = nameof(UserRoles);
public const string Roles = nameof(Roles);
public const string RoleClaims = nameof(RoleClaims);
public const string Products = nameof(Products);
public const string Brands = nameof(Brands);
}

[DisplayName("Roles")]
[Description("Roles Permissions")]
public static class Roles
public static class FSHPermissions
{
private static readonly FSHPermission[] _all = new FSHPermission[]
{
public const string View = "Permissions.Roles.View";
public const string Create = "Permissions.Roles.Create";
public const string Update = "Permissions.Roles.Update";
public const string Delete = "Permissions.Roles.Delete";
}
new("View Dashboard", FSHAction.View, FSHResource.Dashboard),
new("View Hangfire", FSHAction.View, FSHResource.Hangfire),
new("View Users", FSHAction.View, FSHResource.Users),
new("Search Users", FSHAction.Search, FSHResource.Users),
new("Create Users", FSHAction.Create, FSHResource.Users),
new("Update Users", FSHAction.Update, FSHResource.Users),
new("Delete Users", FSHAction.Delete, FSHResource.Users),
new("Export Users", FSHAction.Export, FSHResource.Users),
new("View UserRoles", FSHAction.View, FSHResource.UserRoles),
new("Update UserRoles", FSHAction.Update, FSHResource.UserRoles),
new("View Roles", FSHAction.View, FSHResource.Roles),
new("Create Roles", FSHAction.Create, FSHResource.Roles),
new("Update Roles", FSHAction.Update, FSHResource.Roles),
new("Delete Roles", FSHAction.Delete, FSHResource.Roles),
new("View RoleClaims", FSHAction.View, FSHResource.RoleClaims),
new("Update RoleClaims", FSHAction.Update, FSHResource.RoleClaims),
new("View Products", FSHAction.View, FSHResource.Products, IsBasic: true),
new("Search Products", FSHAction.Search, FSHResource.Products, IsBasic: true),
new("Create Products", FSHAction.Create, FSHResource.Products),
new("Update Products", FSHAction.Update, FSHResource.Products),
new("Delete Products", FSHAction.Delete, FSHResource.Products),
new("View Brands", FSHAction.View, FSHResource.Brands, IsBasic: true),
new("Search Brands", FSHAction.Search, FSHResource.Brands, IsBasic: true),
new("Create Brands", FSHAction.Create, FSHResource.Brands),
new("Update Brands", FSHAction.Update, FSHResource.Brands),
new("Delete Brands", FSHAction.Delete, FSHResource.Brands),
new("Generate Brands", FSHAction.Generate, FSHResource.Brands),
new("Clean Brands", FSHAction.Clean, FSHResource.Brands),
new("View Tenants", FSHAction.View, FSHResource.Tenants, IsRoot: true),
new("Create Tenants", FSHAction.Create, FSHResource.Tenants, IsRoot: true),
new("Update Tenants", FSHAction.Update, FSHResource.Tenants, IsRoot: true),
new("Upgrade Tenant Subscription", FSHAction.UpgradeSubscription, FSHResource.Tenants, IsRoot: true)
};

[DisplayName("Role Claims")]
[Description("Role Claims Permissions")]
public static class RoleClaims
{
public const string View = "Permissions.RoleClaims.View";
public const string Create = "Permissions.RoleClaims.Create";
public const string Update = "Permissions.RoleClaims.Update";
public const string Delete = "Permissions.RoleClaims.Delete";
public const string Search = "Permissions.RoleClaims.Search";
}
public static IReadOnlyList<FSHPermission> All { get; } = new ReadOnlyCollection<FSHPermission>(_all);
public static IReadOnlyList<FSHPermission> Root { get; } = new ReadOnlyCollection<FSHPermission>(_all.Where(p => p.IsRoot).ToArray());
public static IReadOnlyList<FSHPermission> Admin { get; } = new ReadOnlyCollection<FSHPermission>(_all.Where(p => !p.IsRoot).ToArray());
public static IReadOnlyList<FSHPermission> Basic { get; } = new ReadOnlyCollection<FSHPermission>(_all.Where(p => p.IsBasic).ToArray());
}

[DisplayName("Products")]
[Description("Products Permissions")]
public static class Products
{
public const string View = "Permissions.Products.View";
public const string Search = "Permissions.Products.Search";
public const string Create = "Permissions.Products.Create";
public const string Update = "Permissions.Products.Update";
public const string Delete = "Permissions.Products.Delete";
}

[DisplayName("Brands")]
[Description("Brands Permissions")]
public static class Brands
{
public const string View = "Permissions.Brands.View";
public const string Search = "Permissions.Brands.Search";
public const string Create = "Permissions.Brands.Create";
public const string Update = "Permissions.Brands.Update";
public const string Delete = "Permissions.Brands.Delete";
public const string Generate = "Permissions.Brands.Generate";
public const string Clean = "Permissions.Brands.Clean";
}
public record FSHPermission(string Description, string Action, string Resource, bool IsBasic = false, bool IsRoot = false)
{
public string Name => GetName(Action, Resource);
public static string GetName(string action, string resource) => $"Permissions.{resource}.{action}";
}
17 changes: 17 additions & 0 deletions src/Core/Shared/Authorization/FSHRoles.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
using System.Collections.ObjectModel;

namespace FSH.WebApi.Shared.Authorization;

public static class FSHRoles
{
public static string Admin = nameof(Admin);
public static string Basic = nameof(Basic);

public static IReadOnlyList<string> Default { get; } = new ReadOnlyCollection<string>(new[]
{
Admin,
Basic
});

public static bool IsDefault(string roleName) => Default.Any(r => r == roleName);
}
17 changes: 0 additions & 17 deletions src/Core/Shared/Authorization/FSHRootPermissions.cs

This file was deleted.

Loading