Files
mmorales.photo/back/DataModels/RoleModel.cs
2025-08-15 20:03:07 +02:00

75 lines
2.3 KiB
C#

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace back.DataModels;
[Tags("Roles")]
public class RoleModel
{
public RoleModel() { }
[Key]
public string Id { get; set; }
[Required, MaxLength(100)]
public string Name { get; set; }
[MaxLength(250)]
public string Description { get; set; }
[ForeignKey("PermissionId")]
public List<PermissionModel> Permissions { get; set; }
[ForeignKey("RoleId")]
public RoleModel? BaseRoleModel { get; set; }
public RoleModel(string id, string name, string description, List<PermissionModel>? permissions = null, RoleModel? baseRoleModel = null)
{
Id = id;
Name = name;
Description = description;
Permissions = permissions ?? new List<PermissionModel>();
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> {
PermissionModel.ViewContentPermission,
PermissionModel.LikeContentPermission
}
);
public static readonly RoleModel ContentManagerRole = new(
"2", "Content Manager", "Role for managing content",
new List<PermissionModel> {
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> {
PermissionModel.CreateUserPermission,
PermissionModel.EditUserPermission,
PermissionModel.DeleteUserPermission,
PermissionModel.EditWebConfigPermission
},
ContentManagerRole
);
}