Kashif Ahmad Khan Ответов: 1

Включить / отключить кнопку / контекстное меню с помощью метода (функции)


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

2. У меня есть таблица под названием *модификации* в БД, которая состоит из значений, т. е. groupTitle, canEdit, canDelete, что сможем воплотить в жизнь..... groupTitle строка не боол

3. У меня есть функция типа bool *canDoIt(задачи пользователя)* чтобы проверить, является ли пользователь, вошедший в систему (которые будут иметь конкретные groupTitle), может выполнять или не можете (функция return true или false в условии задач, короче)

Предположим, я хочу проверить, может ли вошедший в систему пользователь выполнить задачу или нет, проверить через canDoit (task, userid), и если он не может, то кнопка будет отключена, иначе не будет....
OnForm_Load я бросаю функцию (или, может быть, в другой раз, когда она мне нужна) и проверяю каждую кнопку, т. е.

btnEdit. Enabled = canDo ("canEdit", userID)
btnDelete.Enabled = canDo ("canDelete", userID)
btnCreate.Enabled = canDo ("canCreat", userID)

cnxMenuEdit.Включено = кандо("canEdit", идентификатору пользователя)
cnxMenuDelete.Enabled = canDo ("canDelete", userID)
.
.
.
....и так далее, и тому подобное.

Мой метод работает хорошо и хорошо, но у меня есть сомнения и вопросы....

Первый вопрос: Хорошо ли быть таким?
Второй вопрос: это профессионально?
Другой вопрос, повлияет ли это на производительность программы или базы данных?

Извините, если то же самое уже спрашивали/писали.....

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

btnEdit. Enabled = canDo ("canEdit", userID)
btnDelete.Enabled = canDo ("canDelete", userID)
btnCreate.Enabled = canDo ("canCreat", userID)

cnxMenuEdit.Включено = кандо("canEdit", идентификатору пользователя)
cnxMenuDelete.Enabled = canDo ("canDelete", userID)
.
.
.
....и так далее, и тому подобное.

1 Ответов

Рейтинг:
9

Andy Lanng

Ваше решение прекрасно.

Обычно это делается с ролями или пользователями. Если вы беспокоитесь о том, что слишком часто попадаете в базу данных, то вы можете "кэшировать" разрешения, но если есть разрешения практически на любое действие, то, возможно, лучше всего загружать наборы разрешений только для этого пользователя / роли для этой страницы в form_onload, как вы это сделали.

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


[no name]

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

Andy Lanng

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

[no name]

Ладно, спасибо....
(Это всего лишь клиент)
Будет ли это лучше, чтобы загрузить все разрешения в DataTable или DataSet сразу может быть onload, и всякий раз, когда и где это необходимо в этой форме он может быть использован....?

Andy Lanng

Не совсем. И то, и другое-хорошее решение. Храните его в DataTable или DataSet, если хотите. Я сомневаюсь, что у вас возникнут какие-либо проблемы с таким типом переменной в клиентском приложении.
Похоже, теперь у тебя есть разумный план. Удача ^_^

[no name]

Благодарим вас приятель....