Я работаю над приложением, которое должно управлять разрешениями, и я придумал дизайн, на который мне хотелось получить обратную связь. Я не уверен, что это подходящее место для публикации, но, я думаю, мы это увидим.Связывание перечислений со статическими данными
Пользователю в моем приложении могут быть назначены разрешения. Они могут иметь разрешения на индивидуальном уровне или быть частью группы. Таким образом, у меня есть следующие таблицы (я думаю, что имена являются относительно понятны, но может добавить дополнительную информацию, если это необходимо):
- пользователей
- Права доступа
- User_Permissions
- группы
- User_Groups
- User_Group_Permissions
Проект таблица разрешений это:
- ID INT (разрешение идентификатор, первичный ключ)
- имя VARCHAR (255) (имя разрешения, такие как "Администрация")
- описание VARCHAR (1000) (Краткое описание разрешения)
- default_value TINYINT (значение по умолчанию для назначения пользователей (Да/нет/Никогда))
Однако, когда я проверить разрешение в коде, я не хотел используйте «Magic String», поэтому я создал перечисление для разрешения в моей таблице разрешений, а затем использовать его так:
public enum EPermission
{
ADMINISTRATION = 1,
LOGIN = 2
}
public bool HasPermission(EPermission permission)
{
int permission_id = (int)permission;
//look up the permission in the database based on permission_id
}
Идентификаторов в моей таблице разрешений соответствуют числовым значениям я присвоенные в моих перечислениях. Приложение не имеет возможности изменить их. Разрешения в таблице разрешений вставляются с этими идентификаторами как часть установки и не должны быть изменены.
Является ли такое соединение приемлемым? Я не ожидаю, что данные изменятся, но всегда возможно, что это возможно, и мне просто интересно, может ли быть лучший способ сделать что-то, прежде чем я углубись в это.
Интересно - не думал об идее отражения.Это будет только когда-либо развернуто один раз (или, по крайней мере, в одном месте), возможно, это слишком много для моей ситуации, но, тем не менее, спасибо. – Mansfield