|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
>SeVa Извините - Вас. С уважением, Владимир. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2008, 20:05 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
Владимир, не совсем понял вопрос.На мой взгляд, разграничение прав доступа по ролям менее удобны.Частично я описал уже алгоритм, в дополнение к нему еще применяются Rules из WF для бизнес логики, построения интерфейса и управления его элементами.Примеры на net3fx(RulesDriven UI & ExternalRuleSetToolkit etc).Почти готовый вариант для применения, добавили только кеширование на клиенте. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2008, 13:34 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
>SeVa >Владимир, не совсем понял вопрос. На мой взгляд, разграничение прав доступа по ролям ... Мы видимо строим клиентские системы для отображения информации клиенту и взаимодействия с ним по-разному. Я предпочитаю использовать одну форму (WinForm) и множество панелей (UserControl), что динамически, по требованию, подгружаются. После того, как панель будет построена и пройдет инициализация графических контролов, но до их отображения на форме, фрагмент инициализирующего метода проверяет разрешения (права) пользователя. Если у клиента есть право работать с сответствующими графическими контролами панели - они будут показаны. Права у меня ассоциируютя скорее не контролом, а с панелью. Битовое поле разрешений (прав) содержит булеву переменную РазрешитьВсё. Если её значение истина - будут показаны все контролы панели. Но возможны нюансы - видимость определенного контрола на панели зависит от предыстории загрузки. Такие панели, как панели работы со справочниками, имеют кнопку "Выбор". По её нажатию значение поля guid строки записывается в глобальную переменную клиентского приложения. Её видимость зависит не только от прав пользователя, но и от ситуации, при которой произошла подгрузка панели справочника. С уважением, Владимир. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2008, 16:17 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
По сути и у меня также, но механизмы реализации другие. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2008, 17:02 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
Небольшое уточнение.Есть существенное отличие-разграничение прав производится по операциям, а не по группам графических контолов.Последние реализуют операции и в зависимости от прав с учетом текущего состояния, показываются или нет пользователю. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2008, 18:05 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
>SeVa >Небольшое уточнение... Для меня это собственно не принципильно. На уровне сервера приложений примерно также, как у Вас. Проверяется доступность функции (класс.метод). Проверка прав в клиентском приложении сделана так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43.
С уважением, Владимир. p.s. Форум достает. Что за параноидальная мания сбрасывать вход. Не успеваю написать ответ, как долой регистрация. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2008, 20:51 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
Код: plaintext 1.
- для одноимённого горячей клавиши, тоже такой код? Сейчас в современных IDE разработки, даже строка - является классом. А в приложении ~ 200 меню 200 кнопок, причём пользователь конструирует кнопки и меню сам ! ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2008, 09:26 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
очень полезно открыть Word - настройка панелей инструментов, чтобы не делать велосипеды прошлого тысячилетия. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2008, 09:32 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
Petro123Сейчас в современных IDE разработки, даже строка - является классом Это к чему здесь вообще? Как пример, что все, что угодно, можно усложить сверх необходимого? Petro123А в приложении ~ 200 меню 200 кнопок, причём пользователь конструирует кнопки и меню сам У меня вся работа с правами вообще максимально абстрагирована от элементов управления и экшнов. Логику я писал выше. Безусловно вот так: Код: plaintext 1. 2. 3.
Petro123Word - настройка панелей инструментов, чтобы не делать велосипеды прошлого тысячилетия Настройка панелей управления самим пользователем для себя как исключительно настройка интерфейса весьма далека по своей сути от настройки прав кучи пользователей администратором. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2008, 10:57 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
Зачастую бывает так, что права на операции разные(даже просмотр запрещен).В примере выше абстрагированности я не увидел.Мухи и котлеты не разделены. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2008, 12:50 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
SeVaВ примере выше абстрагированности я не увидел.Мухи и котлеты не разделены. Вы про мой пример? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2008, 12:52 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
Сергей Васкецов 1. К тому, что просто данные (абстрактная кнопка) счас никому не нужны. Нужны данные, умеющие что-то делать (более "умная кнопка", в том числе при работе с правами). Разные методы реализации этого вы приводили. 2. авторделать не стоит. +1. Я про это и написал. Просто примеры кода приводить бессмысленно, т.к. в некоторых ЯП велосипед уже написан. 3. авторНастройка панелей управления самим пользователем для себя как исключительно настройка интерфейса весьма далека по своей сути от настройки прав кучи пользователей администратором. Тема топика - формирование интерфейса от прав.... У админа - тоже интерфейс (он тоже человек :)). И кнопка "Удалить" у него тоже есть. А вот если у него полные права, тогда и вопросов нет (оффтоп будет :)) ЗЫ. В Delphi есть хотя бы такой велосипед.... поэтому всё относительно и готовых решений нет авторTAction is the generic class for action objects that implement user commands across a range of different controls. Unit ActnList Description TAction is a generic action component. It can be added to action managers or action lists when there is no predefined action class that implements the desired response to user commands. Unlike predefined action classes, which have built-in methods that respond when users click the client controls, TAction has no built-in response to user commands. Instead, when using TAction, you can provide the response when the action “fires” by writing an OnExecute event handler, and configure the properties of TAction to reflect current conditions by writing an OnUpdate event handler. Action objects are used to centralize the response to user commands (actions) and to represent user interface elements in applications that use action bands. TAction can also act as a base class for predefined action classes. You can derive from TAction if you wish to retain the published scope of TCustomAction members, or derive from TCustomAction if you wish to modify their scope. For predefined actions that augment the behavior of TAction, see the action classes in the StdActns, DBActns, and ExtActns units. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2008, 13:04 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
Petro123Тема топика - формирование интерфейса от прав.... Ну тогда может быть можно расширенно толковать тему как "формирование интерфейса от того, что ранее сериализовано"? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2008, 13:18 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
Всем огромное спасибо, очень помогаете! Я чуток поразмылил и придумал следующий метод: каждому элементу в таг я записываю строку, условно назовем ее экшн. В базе я делаю соответствие экшонов и вьшек/хранимок от которых они зависят, связь многие ко многим. В связующей таблице я добавляю колонку в которой указываю что делать с обладателем этого экшена у себя в таге, например прятать дизейблить или делать ридонли. Далее в онлоаде формы я бегу по коллекции элементов, смотрю какие экшаны навшаны на элемент и смотрю что соответственно с ним делать. Пусть к примеру у нас элемент текстбокс и он зависит от вьюшки(чтобы отобразить) и от хранимки(чтоб сохранить), к примеру вьюшка у нас доступна а хранимка нет. В связующей таблице на недоступность вьюшки прописано хайд, а на недоступность хранимки прописано ридонли, соотвтственно текстбокс станет ридонли. Надеюсь понято объяснил) Прошу подвергнуть мою идею конструктивной критике, господа. ЗЫ. главная затея в том, чтобы отобразить права прописанные в оракле(на вьюшки,хранимки...) на своем клиенте винформз. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2008, 19:23 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
>Сергей Васкецов > Безусловно вот так: ... делать не стоит... Это почему же. Давайте посмотрим. Вот что делает IDE: #region Component Designer generated code private void InitializeComponent() { ... this.btc_Удалить = new System.Windows.Forms.Button(); ... // // btc_Удалить // this.btc_Удалить.Image = ((System.Drawing.Image)(resources.GetObject("btc_Удалить.Image"))); this.btc_Удалить.Location = new System.Drawing.Point(9, 25); this.btc_Удалить.Name = "btc_Удалить"; this.btc_Удалить.Size = new System.Drawing.Size(34, 23); this.btc_Удалить.TabIndex = 15; this.btc_Удалить.UseVisualStyleBackColor = true; this.btc_Удалить.Click += new System.EventHandler(this.btc_Удалить_Click); ... Я настраиваю кнопки в одном месте - после инициализации контролов. Вы предлагаете это сделать внутри программы инициализации, для каждой кнопки (графического контрола) отдельно. И влезать в код, построенный IDE? Можно, но что это собственно даст, что принципиально изменит? Или Вам не нравится перечисление после if? Если контролов много, то foreach ... и задействуйте поле Tag контрола. С уважением, Владимир. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2008, 21:23 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
>SeVa >В примере выше абстрагированности я не увидел.Мухи и котлеты не разделены. Если Вы беседуете со мной, то давайте посмотрим. Как только клиентское приложение загрузится, пользователю на будет показана панель "uc_Заставка". Здесь картинка (эмблема фирмы?) и одна кнопка "Регистрация". Доступна всем. Нажимаем и получаем системную форму ввода Login и Password. По завершению процесса аутентификации сервер приложения передаст и права (разрешения) доступа клиентскому приложению. Клиентское приложение удаляет с формы "uc_Заставка" и загружает панель с набором контролов (например кнопок) определяющих функционал всего приложения. После инициализации панели проверяем права и гасим контролы, если к ним доступ запрещен. Если клиент администратор, то все контролы видимы. Пользовательский функционал кнопки (к напримеру) определяется программой обработки события (например, нажатие кнопки "Удалить"). Если кнопка не видима, то "нажать" нельзя. Если разрешено, то: Клиентское приложение Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Команда полетела на сервер приложения. Но есть тонкость - время отклика может быть более 2 сек. Нарушается комфортность общения. Процесс ожидания надо как-то отразить. Поэтому вынужден запускать запрос-ответ в рабочем потоке(>SeVa >В примере выше абстрагированности я не увидел.Мухи и котлеты не разделены. Если Вы беседуете со мной, то давайте посмотрим. Как только клиентское приложение загрузится, пользователю на будет показана панель "uc_Заставка". Здесь картинка (эмблема фирмы?) и одна кнопка "Регистрация". Доступна всем. Нажимаем и получаем системную форму ввода Login и Password. По завершению процесса аутентификации сервер приложения передаст и права (разрешения) доступа клиентскому приложению. Клиентское приложение удаляет с формы "uc_Заставка" и загружает панель с набором контролов (например кнопок) определяющих функционал всего приложения. После инициализации панели проверяем права и гасим контролы, если к ним доступ запрещен. Если клиент администратор, то все контролы видимы. Пользовательский функционал кнопки (к напримеру) определяется программой обработки события (например, нажатие кнопки "Удалить"). Если кнопка не видима, то "нажать" нельзя. Если разрешено, то: Клиентское приложение Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Команда полетела на сервер приложения. Но есть тонкость - время отклика может быть более 2 сек. Нарушается комфортность общения. Процесс ожидания надо как-то отразить. Поэтому вынужден запускать запрос-ответ в рабочем потоке (BackgroundWorker). В UI потоке отображается ProgressBar. Сервер приложений. При анализе клиентского запроса его права загружаются из строки сессии. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
С уважением, Владимир. p.s. Возможно команды C# мало что дают, но комментарии помогут понять суть. В UI потоке отображается ProgressBar. Сервер приложений. При анализе клиентского запроса его права загружаются из строки сессии. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
С уважением, Владимир. p.s. Возможно команды C# мало что дают, но комментарии помогут понять суть. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2008, 22:23 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
Не понял, что делает сайт. >SeVa >В примере выше абстрагированности я не увидел.Мухи и котлеты не разделены. Если Вы беседуете со мной, то давайте посмотрим. Как только клиентское приложение загрузится, пользователю на будет показана панель "uc_Заставка". Здесь картинка (эмблема фирмы?) и одна кнопка "Регистрация". Доступна всем. Нажимаем и получаем системную форму ввода Login и Password. По завершению процесса аутентификации сервер приложения передаст и права (разрешения) доступа клиентскому приложению. Клиентское приложение удаляет с формы "uc_Заставка" и загружает панель с набором контролов (например кнопок) определяющих функционал всего приложения. После инициализации панели проверяем права и гасим контролы, если к ним доступ запрещен. Если клиент администратор, то все контролы видимы. Пользовательский функционал кнопки (к напримеру) определяется программой обработки события (например, нажатие кнопки "Удалить"). Если кнопка не видима, то "нажать" нельзя. Если разрешено, то: Клиентское приложение Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Команда полетела на сервер приложения. Но есть тонкость - время отклика может быть более 2 сек. Нарушается комфортность общения. Процесс ожидания надо как-то отразить. Поэтому вынужден запускать запрос-ответ в рабочем потоке (BackgroundWorker). В UI потоке отображается ProgressBar. Сервер приложений. При анализе клиентского запроса его права загружаются из строки сессии. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
С уважением, Владимир. p.s. Возможно команды C# мало что дают, но комментарии помогут понять суть. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.01.2008, 22:26 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
Denis. softwarer (c) /topic/424766&hl=#4090613 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2008, 13:22 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
ВМоисеевДавайте посмотрим. Вот что делает IDE Вы думаете, стоит повторять за кем-то создание велосипеда с квадратными колесами? Тем более что Ваш пример не очень уместен в данной теме. ВМоисеевИ влезать в код, построенный IDE? Нигде я такого не предлагал, Вы что-то путаете. ВМоисеевИли Вам не нравится перечисление после if? Мне не нравится больше всего необходимость даже задумываться, а не отъедет ли раздача прав, не говоря уже о необходимости пописать что-то, даже отдаленно связанное с правами доступа, если в приложении хоть что-то меняется. Еще раз основная мысль: функциональность раздачи и натягивания прав (да вообще все, что связано с правами доступа) доступа должна быть максимально абстрагирована от логики приложения, чтобы при создании новой функциональности ( в том числе при создании нового Action-а, переименовании или удалении любого Action-а ) ее ВООБЩЕ не надо было трогать. А так как каждое раздаваемое полномочие протестировать обычно крайне сложно, то работать это должно как часы, и любые лишние усложнения чреваты. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2008, 14:25 |
|
Формирование интерфейса в заисимоти от привилегий
|
|||
---|---|---|---|
#18+
>Сергей Васкецов >Вы думаете, стоит повторять за кем-то создание велосипеда ... М-да. Извините, но дальнейший разговор с Вами бессмысленен. Я сказал то, что мог. Могущие пусть скажут больше. С уважением, Владимир. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.01.2008, 17:48 |
|
|
start [/forum/topic.php?fid=33&gotonew=1&tid=1548892]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
132ms |
get topic data: |
10ms |
get first new msg: |
8ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
others: | 274ms |
total: | 527ms |
0 / 0 |