Конфигурация на основе лицензии в приложении C# для Windows

Я работаю над приложением Windows на С# (.NET 4.0), и мне нужно что-то для реализации некоторых основных правил ACL или, более конкретно, для применения определенных конфигураций в зависимости от типа пользователя.

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

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

Я осмотрелся, но похоже, что большая часть кода ACL и безопасности в пространстве имен System.Security предназначена для ACL Windows и файловой системы.

Может ли кто-нибудь порекомендовать какие-либо существующие классы (желательно бесплатные), которые реализуют простые ACL на С#.

Мне просто нужно иметь возможность сделать что-то вроде этого:

ACL acl = new ACL();
acl.addRole("User");
acl.addRole("Manufacturer");

acl.addResource("SpecialButton");

acl.deny("SpecialButton");
acl.allow("SpecialButton", "Manufacturer");

// so later in my app I can do

theUserType = "Manufacturer";
// ...
if (acl.isAllowed(theUserType, "SpecialButton")) {
    SpecialButton.Visible = true;
}

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

Это достаточно легко создать, но если это уже сделано, то это еще лучше.


person drew010    schedule 27.09.2011    source источник
comment
Я бы избегал термина ACL в отношении этого, поскольку он отличается (и пересекается с материалом System.Security). То, что вы рассматриваете, - это конфигурация на основе лицензии.   -  person Deleted    schedule 28.09.2011


Ответы (2)


Там действительно не так много того, о чем вы говорите.

У вас есть роли, а у ролей есть атрибуты. Один атрибут может появляться в одной или нескольких ролях. Достаточно просто.

Лицензионный ключ определяет используемую роль. Отсюда загрузите список атрибутов, который может быть либо отдельным списком символов ("OPENCONTACT", "EDITCONTACT", DELETECONTACT), либо парами значений имени (100=OPENCONTACT, 101=EDITCONTACT и т. д.)

Хотя вы можете использовать для этого AzMan, это немного больше, чем вам нужно.

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

person NotMe    schedule 03.10.2011
comment
Это звучит как хороший подход, который подходит. Видите ли вы какие-либо проблемы с настройкой правил во время выполнения с помощью кода, а не с использованием зашифрованного ресурса с соответствующими разрешениями пользователя для каждой группы? Я придумал базовый код, который вы можете увидеть здесь. Видите ли вы какие-либо врожденные недостатки или проблемы с этим? Спасибо! - person drew010; 04.10.2011
comment
@ drew010: Выглядит просто отлично. Код довольно удобен в сопровождении и легко дополняется. Кроме того, если вы когда-нибудь захотите сохранить ассоциации в базе данных или каком-либо другом файле, это преобразование будет выглядеть довольно просто. - person NotMe; 04.10.2011

Если вы развертываете свое приложение в Windows 7 или Windows Server 2003/2008, вы можете рассмотреть возможность использования бесплатной функции диспетчера авторизации, поставляемой с Windows.

См. здесь полный обзор от Microsoft.

По сути, он позволяет вам определять роли, задачи, которые может выполнять каждая роль, и операции, разрешенные для каждой задачи.

Существует API, который вы можете использовать из своего приложения C# для запроса к хранилищу авторизации, чтобы затем запросить, какие операции доступны для конкретной роли. Это даст вам общий список номеров операций, назначенных этой роли. Затем вы можете проверить наличие конкретной операции (или ее отсутствие) и соответствующим образом настроить свой пользовательский интерфейс.

ХТХ, Дин.

person DeanOC    schedule 27.09.2011
comment
Я видел это, но сначала это выглядело больше, чем нам нужно. Кроме того, мы планируем поддерживать клиенты Windows XP. Я вижу, что они могут использовать XML-файлы для ролей, и это хорошо, поскольку правила, по сути, будут встроены в приложение, а не извлекаются из центрального источника или не проверяются им. Приложение работает автономно на ПК нескольких пользователей по всему миру и не зависит от активного сетевого подключения. - person drew010; 28.09.2011
comment
Очевидно, вы можете заставить его работать на XP ссылка . Также нет необходимости иметь активное сетевое подключение; он может быть автономным. - person DeanOC; 28.09.2011