Пытаясь управлять доступом к веб-сайту, я создал несколько необходимых объектов
Цель состоит в том, чтобы использовать пользовательский атрибут разрешения для некоторого метода действия контроллера моего приложения MVC.
[Permissions(PermissionType.SomePermissionName, CrudType.CanDelete)]
public ActionResult SomeAction()
{
}
Для этой операции у меня есть два перечисления
[Flags]
public enum CrudType
{
CanCreate = 0x1,
CanRead = 0x2,
CanUpdate = 0x4,
CanDelete = 0x8,
}
[Flags]
public enum PermissionType
{
SomePermissionName = 0x1,
//...
}
Теперь я хочу, чтобы описанный ниже метод проверял права доступа
public static bool CanAccess(RolePermissions rp, CrudType crudType)
{
var pInfo = rp.GetType().GetProperties();
var res = pInfo.FirstOrDefault(x => x.Name == crudType.ToString());
if(res != null)
{
return Convert.ToBoolean(res.GetValue(rp, null));
}
return false;
}
Это работает хорошо, но безопасно лииспользовать отражение здесь?Это хороший стиль?Еще один вопрос касается такого фрагмента кода
var permission = PermissionService.GetByName(permissionType.ToString());
Здесь я пытаюсь получить объект разрешения из базы данных, используя некоторую именованную константу из перечисления PermissionType
.В обоих случаях правильная работа зависит от отношений между перечислениями и некоторыми полями таблицы или записями.С другой стороны у меня есть хороший механизм управления логикой (как мне кажется).Это хороший способ?