Я пытаюсь создать элемент управления, который может расширять другие веб-элементы управления и устанавливать некоторые свойства, такие как видимые и включенные, на основе разрешений пользователя.
Вот пример, в котором ваша роль пользователя должна включать разрешение «CanSave»:
<asp:Button ID="btn1" runat="server" Text="Save"/>
<myControls:PermissionsExtender runat="server" ControlToSet="btn1" Permission="CanSave"/>
Я пытаюсь сохранить это многоразовое использование, поэтому PermissionExtender находится в отдельном проекте, который не может иметь никаких зависимостей от других проектов. Чтобы принять решение, контроль, конечно, должен получить эту информацию откуда-то еще (база данных или что-то). Я сделал еще один элемент управления и, используя события, вышеуказанный расширитель будет установлен главным элементом управления, поэтому только тот, кто должен знать, где искать информацию.
Теперь необходимо настроить главный элемент управления, чтобы знать, откуда будет поступать информация о ролях и разрешениях. Моя идея состояла в том, чтобы иметь интерфейс внутри проекта многократного использования и реализовать его где-то еще, затем сконфигурировать мой элемент управления, чтобы найти и найти класс, который реализует нужный мне метод, и загрузить его через отражение. Но мне неясно, как это может работать. Я бы, вероятно, разместил главный элемент управления на главной странице и предоставил ему имя класса, например PermissionClass = "SecurityLibrary.PermissionsClass". Вроде как ObjectDatasource, но другие предложения приветствуются.
Подпись метода будет выглядеть так:
bool HasPermission(string permission)
Он знал бы текущую роль пользователей и, используя эту комбинацию, ищет, включает ли роль разрешение.
Как я могу подключить вызов от элемента управления к методу внутри моего основного проекта, который может предоставить необходимую информацию, не делая их зависимыми.