Member 13142345 Ответов: 2

Как централизованно отключить все кнопки в проекте


У меня есть проект около 250 экранов. На каждом экране есть несколько кнопок, таких как New, Save, Delete и close.

Когда пользователь входит в приложение, мы даем ему права доступа для навигации по приложению.

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

Что я уже пробовал:

Как лучше всего подойти к этому глобально ? С помощью функции. Прямо сейчас мы пишем привилегии на каждой странице, чтобы отключить эту кнопку.

F-ES Sitecore

Веб-формы? MVC?

Member 13142345

Веб-формы

2 Ответов

Рейтинг:
15

Rob Philpott

Ладно, просто не обращай на меня внимания. Я думал, что это winforms. Что за идиотка...


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

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

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

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

Поэтому в основном делайте это в одном месте, используя производную форму или производную кнопку.


Рейтинг:
10

Ziee-M

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


protected void Page_Load(object sender, EventArgs e)
{
  DisableChilds(this.Page);
}

 private void DisableChilds(Control ctrl)
        {
            foreach (Control c in ctrl.Controls)
            {
                DisableChilds(c);
                if (c is Button)
                {
                    ((Button)(c)).Enabled = false;
                }
            }
        }

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

Я думаю, что есть еще один метод, который позволяет вам получить все элементы управления на странице, Я не могу его вспомнить ...