using System.ComponentModel.DataAnnotations; namespace back.DataModels; [Tags("Roles")] public class RoleModel { [Key] public string Id { get; set; } [Required, MaxLength(100)] public string Name { get; set; } [MaxLength(250)] public string Description { get; set; } public List Permissions { get; set; } public RoleModel? BaseRoleModel { get; set; } public RoleModel(string id, string name, string description, List? permissions = null, RoleModel? baseRoleModel = null) { Id = id; Name = name; Description = description; Permissions = permissions ?? new List(); BaseRoleModel = baseRoleModel; if (baseRoleModel != null) { Permissions.AddRange(baseRoleModel.Permissions); } } public bool IsAdmin => Id == AdminRole.Id; public bool IsContentManager => Id == ContentManagerRole.Id; public bool IsUser => Id == UserRole.Id; public bool HasPermission(PermissionModel permission) { return Permissions.Exists(p => p.Id == permission.Id); } public static readonly RoleModel UserRole = new( "1", "User", "Role for regular users", new List { PermissionModel.ViewContentPermission, PermissionModel.LikeContentPermission } ); public static readonly RoleModel ContentManagerRole = new( "2", "Content Manager", "Role for managing content", new List { PermissionModel.CreateUserPermission, PermissionModel.DisableUserPermission, PermissionModel.CreateContentPermission, PermissionModel.EditContentPermission, PermissionModel.DeleteContentPermission }, UserRole ); public static readonly RoleModel AdminRole = new( "3", "Admin", "Administrator role with full permissions", new List { PermissionModel.CreateUserPermission, PermissionModel.EditUserPermission, PermissionModel.DeleteUserPermission, PermissionModel.EditWebConfigPermission }, ContentManagerRole ); }