Пытаясь управлять доступом к веб-сайту, я создал несколько необходимых сущностей
Цель состоит в том, чтобы использовать настраиваемый атрибут разрешения для некоторого метода действий контроллера моего приложения 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
.
В обоих случаях правильная работа зависит от отношений между перечислениями и некоторыми полями или записями таблицы. С другой стороны, у меня есть хороший механизм управления логикой (как мне кажется).
Это хороший способ?