Безопасно ли использовать отражение и перечисления для логического управления доступом к приложению MVC?

Пытаясь управлять доступом к веб-сайту, я создал несколько необходимых сущностей enter image description here

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

7
задан Shymep 17 December 2011 в 15:31
поделиться