70 lines
2.2 KiB
C#
70 lines
2.2 KiB
C#
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<PermissionModel> Permissions { get; set; }
|
|
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
|
|
);
|
|
}
|