MyBookmark/Modules.User.Infrastructure.Database/Database/RolesAndPermissionSeedList.cs

169 lines
10 KiB
C#

using Common.Security;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Modules.User.Database.Database.Entities;
namespace Modules.User.Database.Database;
internal static class RolesAndPermissionSeedList
{
private const int _pPermissionsViewDetails = 1;
private const int _pPermissionsManage = 2;
private const int _pUsersViewPublicProfile = 3;
private const int _pUsersViewProfileDetail = 4;
private const int _pUsersViewList = 5;
private const int _pUsersManage = 6;
private const int _pUsersBan = 7;
private const int _pUsersUnban = 8;
private const int _pUsersManagePermissions = 9;
private const int _pLibRead = 10;
private const int _pLibVote = 11;
private const int _pLibManage = 12;
private const int _pLibDictRead = 13;
private const int _pLibDictManage = 14;
private const int _pViewsReadCount = 15;
private const int _pViewsReadSelf = 16;
private const int _pViewsManageSelf = 17;
private const int _rAdmin = 1;
private const int _rVisitor = 2;
private const int _rModerator = 3;
private const int _rLibrarian = 4;
internal static void SeedPermissions(EntityTypeBuilder<Permission> builder)
{
builder.HasData(
new Permission { Id = _pPermissionsViewDetails, Code = Constants.Permissions.ViewDetails, Name = "Просмотр разрешений" },
new Permission { Id = _pPermissionsManage, Code = Constants.Permissions.Manage, Name = "Управление разрешениями" },
new Permission { Id = _pUsersViewPublicProfile, Code = Constants.Permissions.User.ViewProfilePublic, Name = "Просмотр публичного профиля пользователя" },
new Permission { Id = _pUsersViewProfileDetail, Code = Constants.Permissions.User.ViewProfileDetail, Name = "Просмотр детального профиля пользователя" },
new Permission { Id = _pUsersViewList, Code = Constants.Permissions.User.ViewList, Name = "Просмотр списка пользователей" },
new Permission { Id = _pUsersManage, Code = Constants.Permissions.User.Manage, Name = "Управление пользователями" },
new Permission { Id = _pUsersBan, Code = Constants.Permissions.User.Ban, Name = "Бан пользователей" },
new Permission { Id = _pUsersUnban, Code = Constants.Permissions.User.Unban, Name = "Разбан пользователей" },
new Permission { Id = _pUsersManagePermissions, Code = Constants.Permissions.User.ManagePermissions, Name = "Управление разрешениями пользователей" },
new Permission { Id = _pLibRead, Code = Constants.Permissions.Library.Read, Name = "Чтение библиотеки" },
new Permission { Id = _pLibVote, Code = Constants.Permissions.Library.Vote, Name = "Голосование" },
new Permission { Id = _pLibManage, Code = Constants.Permissions.Library.Manage, Name = "Управление библиотекой" },
new Permission { Id = _pLibDictRead, Code = Constants.Permissions.Library.Dictionaries.Read, Name = "Чтение словарей" },
new Permission { Id = _pLibDictManage, Code = Constants.Permissions.Library.Dictionaries.Manage, Name = "Управление словарями" },
new Permission { Id = _pViewsReadCount, Code = Constants.Permissions.Library.Views.ReadCount, Name = "Чтение общего числа просмотров" },
new Permission { Id = _pViewsReadSelf, Code = Constants.Permissions.Library.Views.ReadSelf, Name = "Чтение своих просмотров" },
new Permission { Id = _pViewsManageSelf, Code = Constants.Permissions.Library.Views.ManageSelf, Name = "Управление своими просмотрами" }
);
}
internal static void SeedRoles(EntityTypeBuilder<Role> roleBuilder, ModelBuilder builder)
{
var rolePermissions = new HashSet<(int RoleId, int PermissionId)>
{
// Visitor
(_rVisitor, _pLibRead),
(_rVisitor, _pLibVote),
(_rVisitor, _pViewsReadCount),
(_rVisitor, _pViewsReadSelf),
(_rVisitor, _pViewsManageSelf),
(_rVisitor, _pUsersViewPublicProfile),
// Librarian
(_rLibrarian, _pLibManage),
(_rLibrarian, _pLibDictRead),
(_rLibrarian, _pLibDictManage),
// Moderator
(_rModerator, _pUsersViewProfileDetail),
(_rModerator, _pUsersViewList),
(_rModerator, _pUsersBan),
(_rModerator, _pUsersUnban),
// Admin
(_rAdmin, _pUsersManage),
(_rAdmin, _pUsersManagePermissions),
(_rAdmin, _pPermissionsViewDetails),
(_rAdmin, _pPermissionsManage)
};
// Добавляем наследование прав от предыдущих ролей
foreach (var inherited in rolePermissions.Where(x => x.RoleId == _rVisitor).ToList())
{
rolePermissions.Add((_rLibrarian, inherited.PermissionId));
rolePermissions.Add((_rModerator, inherited.PermissionId));
rolePermissions.Add((_rAdmin, inherited.PermissionId));
}
foreach (var inherited in rolePermissions.Where(x => x.RoleId == _rLibrarian).ToList())
{
rolePermissions.Add((_rAdmin, inherited.PermissionId));
}
foreach (var inherited in rolePermissions.Where(x => x.RoleId == _rModerator).ToList())
{
rolePermissions.Add((_rAdmin, inherited.PermissionId));
}
roleBuilder.HasData(
new Role { Id = _rVisitor, Name = "Посетитель", Code = "visitor" },
new Role { Id = _rLibrarian, Name = "Библиотекарь", Code = "librarian" },
new Role { Id = _rModerator, Name = "Модератор", Code = "moderator" },
new Role { Id = _rAdmin, Name = "Администратор", Code = "admin" }
);
builder.Entity("RolePermissions").HasData(
rolePermissions.Select(x => new { x.RoleId, x.PermissionId }).ToArray<object>()
);
/*
builder.Entity("RolePermissions").HasData(
// Visitor
new { RoleId = rVisitor, PermissionId = pLibRead },
new { RoleId = rVisitor, PermissionId = pLibVote },
new { RoleId = rVisitor, PermissionId = pViewsReadCount },
new { RoleId = rVisitor, PermissionId = pViewsReadSelf },
new { RoleId = rVisitor, PermissionId = pViewsManageSelf },
new { RoleId = rVisitor, PermissionId = pUsersViewPublicProfile },
// Librarian = Visitor + manage
new { RoleId = rLibrarian, PermissionId = pLibRead },
new { RoleId = rLibrarian, PermissionId = pLibVote },
new { RoleId = rLibrarian, PermissionId = pViewsReadCount },
new { RoleId = rLibrarian, PermissionId = pViewsReadSelf },
new { RoleId = rLibrarian, PermissionId = pViewsManageSelf },
new { RoleId = rLibrarian, PermissionId = pUsersViewPublicProfile },
new { RoleId = rLibrarian, PermissionId = pLibManage },
new { RoleId = rLibrarian, PermissionId = pLibDictRead },
new { RoleId = rLibrarian, PermissionId = pLibDictManage },
// Moderator = Visitor + ban/unban users
new { RoleId = rModerator, PermissionId = pLibRead },
new { RoleId = rModerator, PermissionId = pLibVote },
new { RoleId = rModerator, PermissionId = pViewsReadCount },
new { RoleId = rModerator, PermissionId = pViewsReadSelf },
new { RoleId = rModerator, PermissionId = pViewsManageSelf },
new { RoleId = rModerator, PermissionId = pUsersViewPublicProfile },
new { RoleId = rModerator, PermissionId = pUsersViewProfileDetail },
new { RoleId = rModerator, PermissionId = pUsersViewList },
new { RoleId = rModerator, PermissionId = pUsersBan },
new { RoleId = rModerator, PermissionId = pUsersUnban },
// Admin = Librarian + users/roles manage
new { RoleId = rAdmin, PermissionId = pLibRead },
new { RoleId = rAdmin, PermissionId = pLibVote },
new { RoleId = rAdmin, PermissionId = pViewsReadCount },
new { RoleId = rAdmin, PermissionId = pViewsReadSelf },
new { RoleId = rAdmin, PermissionId = pViewsManageSelf },
new { RoleId = rAdmin, PermissionId = pLibManage },
new { RoleId = rAdmin, PermissionId = pLibDictRead },
new { RoleId = rAdmin, PermissionId = pLibDictManage },
new { RoleId = rAdmin, PermissionId = pUsersManage },
new { RoleId = rAdmin, PermissionId = pUsersManagePermissions },
new { RoleId = rAdmin, PermissionId = pUsersViewPublicProfile },
new { RoleId = rAdmin, PermissionId = pUsersViewProfileDetail },
new { RoleId = rAdmin, PermissionId = pUsersViewList },
new { RoleId = rAdmin, PermissionId = pUsersBan },
new { RoleId = rAdmin, PermissionId = pUsersUnban },
new { RoleId = rAdmin, PermissionId = pPermissionsViewDetails },
new { RoleId = rAdmin, PermissionId = pPermissionsManage }
);
*/
}
}