Как сослаться на реестр базы данных доменной таблицы в коде C #? - PullRequest
1 голос
/ 22 марта 2012

Мой вопрос:

У меня есть доменная таблица в базе данных, где я добавляю некоторые правила для пользователей.

Примерно так:

Таблица пользовательских ролей:

idRule cRuleDescription bRuleIsActive
1   Edit client      true
2   Delete client    false

Мое приложение C # обращается к этой таблице с использованием перечисления, например:

public enum UserRoles: int
{
    CanEditClient = 1,
    CanDeleteClient = 2,
    CanChangeClientName = 3,

    //More code
}

И я использую метод C #, который запрашивает базу данных по ее идентификатору, чтобы узнать, есть ли у зарегистрированного пользователя разрешение на какое-либо действие. Примерно так:

bool HasPermissionToEdit = Rules.UserHasPermisson(UserName, UserRoles.CanEditClient)

if(HasPermissionToEdit)
{
  //Do the work!
}

Но использование этого доставляет мне некоторые проблемы. Кто-то создал новые строки в производственной среде в базе данных. И идентификаторы больше не верны. И мне нужно изменить перечисление в моем коде C #. Мне нужно использовать эту таблицу, потому что администраторы могут управлять правилами для другой группы пользователей.

Как вы с этим работаете? Есть лучший способ ссылки на реестр в таблице?

Ответы [ 2 ]

1 голос
/ 03 апреля 2013

Если вы хотите реализовать это правильно, сделайте так, чтобы ключ содержал название роли. Таким образом, не может быть несчастных случаев с удостоверениями личности, когда кто-то считает, что ключ не имеет смысла. Называть его idRule не помогает.

Во-вторых, добавьте проверочное ограничение для обеспечения правильного использования имен ролей.

В-третьих, добавьте ограничение уникального ключа к имени роли, чтобы каждая из ролей появлялась только один раз.

Вы можете использовать строковые перечисления для преобразования имен ролей в целые числа, если хотите. См. C # String enums для хорошего шаблона проектирования.

Пример таблицы:

ID - ИМЯ - ОПИСАНИЕ - IS_ACTIVE
1 - CanEditClient - клиент - верно
2 - CanDeleteClient - клиент - ложь
3 - CanChangeClientName - клиент - верно

Затем убедитесь, что к NAME добавлено уникальное ограничение, а также проверочное ограничение.

Теперь, независимо от того, как кто-то тасует идентификаторы, ваш код продолжит работать.

0 голосов
/ 22 марта 2012

Использование идентификатора правила для сопоставления с перечислением само по себе не является безумным, если идентификатор правила не генерируется автоматически (то есть не является столбцом идентификаторов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...