Роль пользователя имеет коллекцию BusinessFunction и набор разрешений для каждой из них (чтение, запись, удаление)
например. У меня есть бизнес-функция под названием «Управление арендой книг», которая связана с ролью «Библиотекарь», формой LibraryForm и таблицами «Книги», «Прокат» и «Клиенты». Роль Библиотекаря имеет доступ на чтение и запись для указанных таблиц.
Доступ к форме и базе данных обрабатывается в разных местах, но все они используют одни и те же значения BusinessFunction, что означает, что у меня есть много строковых литералов, которые напрямую сравниваются во многих разных местах. Когда я проверяю доступ пользователя к форме, мне нужно знать, с какой BusinessFunction связана эта форма, и в этом суть моего вопроса: есть ли способ, чтобы мои формы использовали это свойство, но которое позволило бы мне получить значение для конкретной формы без необходимости ее создания? например поэтому я могу вызвать CheckAccess(LibraryForm.BusinessFunction) без необходимости создания экземпляра LibraryForm и вызова CheckAccess() внутри.
Я рассматривал возможность создания списка констант где-нибудь, где все имеют к нему доступ, и мне, вероятно, все равно придется это сделать, но помимо присвоения им имен таким образом, чтобы они очень четко коррелировали с формой, это лишь поможет мне в некоторой степени
Чтобы внести ясность, я не спрашиваю, могу ли я и почему я не могу использовать статические абстрактные или статические виртуальные свойства (уже есть много вопросов по этому поводу), я спрашиваю, есть ли шаблон или альтернативный подход, который я могу использовать для получения результата, который мне нужен. К сожалению, это приложение .net Framework, поэтому я не могу использовать новые статические элементы виртуального интерфейса.
Несколько потенциальных подходов:
- Класс констант с константной строкой LIBRARY_BUSINESS_FUNCTION = «Управление арендой книг» или константной строкой MANAGE_BOOK_RENTALS
Достаточно легко реализовать, но немного громоздко и нетривиально в обслуживании
Код: Выделить всё
static Dictionary FormFunctions- Это позволит мне вызвать FormFunctions[nameof(LibraryForm)]
- Я не могу разместить это где-нибудь с доступом к библиотеке, которая определяет мои формы, иначе у меня будет циклическая ссылка, поэтому ключи словаря будут строковыми литералами - очень сложно поддерживать и масштабировать
- Это приблизит меня к «статическому» доступу
- Я мог бы использовать генератор исходного кода или плетение для перемещения проверок во время компиляции
Подробнее здесь: https://stackoverflow.com/questions/798 ... the-proper
Мобильная версия