Использование сущности framework, у меня есть объект, называемый разрешениями, который имеет набор bool
s, чтобы указать, что можно и чего нельзя сделать.C# nameof в строго типизированный параметр?
Немного как:
public class Permissions
{
public int Id {get;set;}
public int GroupId {get;set;}
public bool ViewRecords {get;set;}
public bool EditRecords {get;set;}
public bool DeleteRecords {get;set;}
public bool CreateRecords {get;set;}
public bool CreateSubGroups {get;set;}
}
Вы получаете идею. Каждая группа пользователей имеет один из них, и все это хорошо.
У меня есть класс служб безопасности, который проверяет и проверяет эту информацию против правильной группы и действия - опять же, все работает хорошо - однако у меня остались некоторые магические строки, которые я бы хотел избежать.
Например: public bool HasPermission(int groupId, string action)
Я хотел бы, как: public bool HasPermission(int groupId, Permission action)
На данный момент я использую nameof
, так:
bool go = HasPermission(123, nameof(Permission.ViewRecords));
Однако, есть способ отображения свойства класса, таким образом, это было бы:
bool go = HasPermission(123, Permission.ViewRecords);
Я мог бы сделать это с перечислением и поддерживать эти два, чтобы отражать друг друга, но это накладные расходы, которые я бы хотел избежать - и в то время как имя работает, факт заключается в том, что метод может получать любую строку и поэтому может быть разбит позже по линии.
Почему бы не использовать перечисление? Это не так много накладных расходов, и это препятствует тому, чтобы кто-то пропустил неизвестную магическую строку по линии. –
Другим преимуществом перечисления является то, что вы можете сделать его переименованием флагов и достаточно легко проверить наличие нескольких разрешений. – Servy
@ StephenWilson, что я спрашиваю - пока это не массивная накладная работа, я стараюсь свести к минимуму количество изменений, необходимых, когда (неизменно) новое разрешение добавляется позже по строке. Теперь совершенно правильный ответ: «Нет, переименование - это хорошо (tm)». WIth @ Servy указывает на 'flags' (новый для меня там),' Enum' становится более привлекательным! – RemarkLima