transactions
This commit is contained in:
94
back/DataModels/Role.cs
Normal file
94
back/DataModels/Role.cs
Normal file
@@ -0,0 +1,94 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace back.DataModels;
|
||||
|
||||
[Table("Roles")]
|
||||
public partial class Role : IEquatable<Role>
|
||||
{
|
||||
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
|
||||
public string Id { get; set; } = null!;
|
||||
[Required, MaxLength(100)]
|
||||
public string Name { get; set; } = null!;
|
||||
[MaxLength(250)]
|
||||
public string? Description { get; set; }
|
||||
public string? BaseRoleModelId { get; set; }
|
||||
public virtual Role? BaseRoleModel { get; set; }
|
||||
public virtual ICollection<Role> InverseBaseRoleModel { get; set; } = [];
|
||||
public virtual ICollection<Permission> Permissions { get; set; } = new HashSet<Permission>();
|
||||
public virtual ICollection<User> Users { get; set; } = [];
|
||||
|
||||
|
||||
public bool IsAdmin() => BaseRoleModel != null ? BaseRoleModel.IsAdmin() : Id == AdminRole.Id;
|
||||
public bool IsContentManager() => BaseRoleModel != null ? BaseRoleModel.IsContentManager() : Id == ContentManagerRole.Id;
|
||||
public bool IsUser() => BaseRoleModel != null ? BaseRoleModel.IsUser() : Id == UserRole.Id;
|
||||
|
||||
public bool HasPermission(Permission permission)
|
||||
{
|
||||
var baseRoleHasPermission = BaseRoleModel != null && BaseRoleModel.HasPermission(permission);
|
||||
return baseRoleHasPermission || Permissions.Any(p => p.Id == permission.Id);
|
||||
}
|
||||
|
||||
public Role() { }
|
||||
|
||||
public Role(string id, string name, string description, List<Permission>? permissions = null, Role? baseRoleModel = null)
|
||||
{
|
||||
Id = id;
|
||||
Name = name;
|
||||
Description = description;
|
||||
Permissions = permissions ?? [];
|
||||
if (baseRoleModel != null)
|
||||
{
|
||||
BaseRoleModel = baseRoleModel;
|
||||
BaseRoleModelId = baseRoleModel.Id;
|
||||
foreach (var permission in baseRoleModel.Permissions)
|
||||
{
|
||||
if (!Permissions.Any(p => p.Id == permission.Id))
|
||||
{
|
||||
Permissions.Add(permission);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override int GetHashCode() => HashCode.Combine(Id, Name);
|
||||
|
||||
public override bool Equals(object? obj) => obj is Role otherEvent && Equals(otherEvent);
|
||||
|
||||
public bool Equals(Role? other)
|
||||
{
|
||||
if (other is null) return false;
|
||||
if (ReferenceEquals(this, other)) return true;
|
||||
return Id == other.Id || GetHashCode() == other.GetHashCode();
|
||||
}
|
||||
|
||||
public static readonly Role UserRole = new(
|
||||
"1", "User", "Role for regular users",
|
||||
[
|
||||
Permission.ViewContentPermission,
|
||||
Permission.LikeContentPermission
|
||||
]
|
||||
);
|
||||
|
||||
public static readonly Role ContentManagerRole = new(
|
||||
"2", "Content Manager", "Role for managing content",
|
||||
[
|
||||
Permission.CreateContentPermission,
|
||||
Permission.EditContentPermission,
|
||||
Permission.DeleteContentPermission
|
||||
],
|
||||
UserRole
|
||||
);
|
||||
|
||||
public static readonly Role AdminRole = new(
|
||||
"3", "Admin", "Administrator role with full permissions",
|
||||
[
|
||||
Permission.CreateUserPermission,
|
||||
Permission.DisableUserPermission,
|
||||
Permission.EditUserPermission,
|
||||
Permission.DeleteUserPermission,
|
||||
Permission.EditWebConfigPermission
|
||||
],
|
||||
ContentManagerRole
|
||||
);
|
||||
}
|
Reference in New Issue
Block a user