реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Уровень доступа + функционал. Алгоритмы
Буратино
сообщение Apr 21 2011, 17:04
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Есть электронный прибор с микропроцессорным управлением.
К прибору могут прикладываться самые разные люди, с разной квалификацией и полномочиями. Для этого я ввожу в систему такое понятие как уровень доступа (Level_0, Level_1, Level_2,..Level_Х)
Но помимо этого у прибора есть определённый функционал, функции которого обрабатывают например клавиатуру, датчики, ЖПС модуль, элементы индикации, исполнительные ус-ва, реле и т.д.
С разных уровней доступа, человек который работает с прибором, может рассчитывать на разный функционал. Другими словами сами логика и правила управления прибором должны учитывать уровень доступа пользователя в системе.
Скажите, как правильнее реализовать (запрограммировать) обработку и функционала и уровня доступа? Я говорю о решении ,которое будет удобно тестировать и отлаживать.

У меня есть идея поместить управление всеми элементами индикации, всеми реле и другими исполнительными устройствами в одну фукнцию, а перед всеми входными воздействиями поставить как своего рода фильтр другую функцию. И тогда уже внутри этих функций, в соответствии с уровнем доступа, принимать решения о функционале в соответствующем уровне.
Что это даст:
а) я пишу функционал так как будто нет никаких уровней доступа (но в тех местах где я что-то получаю либо чем-то управляю из алгоритма, делаю это не напрямую, а через эти функции "пробки")
б) я экономлю на объеме кода (оч. актуально в моем случае)
в) сопровождать/править/отлаживать легче

Не факт что так правильно, но если че поправьте. Спасибо!


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Apr 21 2011, 17:14
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Цитата
Скажите, как правильнее реализовать (запрограммировать) обработку и функционала и уровня доступа?
ну так просто и организуйте - глобальная переменная access_mode определяет уровень доступа, в нужных местах проверяется и в зависимости от значения выполняется конкретная ветка кода
Цитата
У меня есть идея поместить управление всеми элементами индикации, всеми реле и другими исполнительными устройствами в одну фукнцию
а вот это не стоит делать. Программу лучше делить на максимально независимые модули - так намного легче тестировать, модифицировать и т.д. Проверено на собственной шкуре
Go to the top of the page
 
+Quote Post
Буратино
сообщение Apr 21 2011, 17:26
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Цитата(ukpyr @ Apr 21 2011, 20:14) *
ну так просто и организуйте - глобальная переменная access_mode определяет уровень доступа, в нужных местах проверяется и в зависимости от значения выполняется конкретная ветка кодаа вот это не стоит делать. Программу лучше делить на максимально независимые модули - так намного легче тестировать, модифицировать и т.д. Проверено на собственной шкуре


глобальная переменная естественно будет, но зачем проверять ее значение на каждом повороте алгоритма? Выписывать все эти ифы на каждом углу? Не правильнее ли вынести принятие решения в две функции: одна из которых отфильтрует входные данные в систему ,а вторая ограничит список выходных данных из системы?

Ну например: админ имеет уровень доступа 4, это максимально возможный уровень, а простой пользователь уровень 2.
Админ может перепрограммировать время на которое будет включен например соленоид, а юзер не имеет таких прав.

Вы предлагаете в функции, которая может изменить время сработки, установить проверку уровня доступа, и только лишь пользователям с 4м уровнем (админам) разрешать ее выполнение? А почему эта функция вообще выполняется? Может быть сам вызов ее для пользователя с 2м уровнем запретить? Мы ведь можем просто не пропустить далее по алгоритму эту попытку, имея фильтр на входных воздействиях!
Понимаете что я вообще имею в виду?


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
ukpyr
сообщение Apr 21 2011, 17:36
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 264
Регистрация: 17-06-08
Из: бандустан
Пользователь №: 38 347



Цитата
Мы ведь можем просто не пропустить далее по алгоритму эту попытку, имея фильтр на входных воздействиях!
в таком случае для переменных пишется табличка с битовыми масками уровня доступа, при просмотре/редактировании маска переменной сравнивается с текущим уровнем доступа и решается нужно ли отображать/редактировать переменную. Никаких проверок на каждом углу, только в одном месте
Go to the top of the page
 
+Quote Post
garlands
сообщение Apr 21 2011, 17:52
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 364
Регистрация: 15-04-08
Из: UA
Пользователь №: 36 798



хм. вся фильтрация осуществляется еще на уровне юзверьского междумордия. и именно в этом модуле принимается решение о манипулировании настройками и даже показом пунктов меню. весь остальной алгоритм пребывает в счастливом неведении об уровнях доступа и прочей ереси. пришла команда зажечь светик - сделано. а вся забота о разграничении прав подать такую команду - на UI (user interface) и связанном с ним модулем разграничения доступа...
Go to the top of the page
 
+Quote Post
Буратино
сообщение Apr 21 2011, 20:19
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Цитата(garlands @ Apr 21 2011, 20:52) *
хм. вся фильтрация осуществляется еще на уровне юзверьского междумордия. и именно в этом модуле принимается решение о манипулировании настройками и даже показом пунктов меню. весь остальной алгоритм пребывает в счастливом неведении об уровнях доступа и прочей ереси. пришла команда зажечь светик - сделано. а вся забота о разграничении прав подать такую команду - на UI (user interface) и связанном с ним модулем разграничения доступа...


Все верно, но встречаются (в частности у меня) ситуации, когда входными, по отношению к системе, являются не только данные с клавиатуры! Ну например асинхронный канал связи по которому передаются команды в систему, ну например информация с датчиков, органов управления и т.д.
получается, что необходимо встраивать механизм разграничения по правам в каждый из этих входных каналов связи?
А выходными параметрами системы никак по Вашему не нужно управлять в разрезе прав доступа?
А как быть если например прибор находится в состоянии с уровнем доступа для пользователя, и этот самый пользователь, нажимая кнопки на приборе, поворачивает стрелу крана, а с правами администратора те же кнопки нужны для навигации по меню и/или переконфигурировании прибора?
Или вот например у меня права доступа "все прочие" должны обязательно сопровождаться отсутствием какой либо индикации на приборе! В конце концов прибор может сформировать результат некоего внутреннего вычисления, исследования, замера но результатом поделиться только лишь с соответствующими пользователями. Можно еще много всего придумать, я уверен, что выходные параметры прибора должны быть под надзором системы разделения прав.

А может все таки наложить некую комбинацию "фильтров" на входные и выходные воздействия системы в соответствии с правами пользователей?


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
нечитатель
сообщение Apr 22 2011, 03:57
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 235
Регистрация: 20-11-10
Пользователь №: 61 032



входное воздействие - интерфейс [суть способ преобразования, в т.ч. алгоритм, в т.ч. контроль прав] - внутренние параметры устройства

внутренние параметры - интерфейс [суть способ преобразования, в т.ч. алгоритм, в т.ч. контроль прав] - данные наружу

---

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

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

... махание стрелой крана - не интерфейс, а внутренняя работа, функционал как таковой.
который зависит только от внутренних параметров.
которые могут изменяться только через интерфейс.
в котором уже проверены права.

Сообщение отредактировал нечитатель - Apr 22 2011, 04:03
Go to the top of the page
 
+Quote Post
iosifk
сообщение Apr 22 2011, 04:46
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



Цитата(Буратино @ Apr 21 2011, 21:04) *
.... у прибора есть определённый функционал, функции которого обрабатывают...


Все хорошо, вот только термина "функционал" в родном русском языке - нет!!!
А вот здесь он есть: http://iosifk.narod.ru/slovar_feni.pdf
Почитайте, может пригодится...
Удачи!


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
Буратино
сообщение Apr 22 2011, 05:20
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Цитата(iosifk @ Apr 22 2011, 08:46) *
Все хорошо, вот только термина "функционал" в родном русском языке - нет!!!
А вот здесь он есть: http://iosifk.narod.ru/slovar_feni.pdf
Почитайте, может пригодится...
Удачи!


Мне всегда все эти поползновения борцов за чистоту языка, напоминали усилия Геббельса направленные в русло работы с чистотой нации.
Спасибо большое за ссылку, но меня интересовали вопросы функционала и прав доступа в одной системе.


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Apr 22 2011, 07:07
Сообщение #10


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Буратино @ Apr 22 2011, 08:20) *
интересовали вопросы функционала и прав доступа


У меня есть меню, набор элементов в нем зависит от кода доступа.
Реализуется это абсолютно очевидно, при входе ставятся соответствующие флаги и все входы заносятся в журнал:
Код
            if (my_pin==se.ServicePin)
            {    OffFlag(factory_flag);
                AddServiceLog(SERVICE_LOGIN);
                NEWS(stServiceMenu);
                return;
            }
            if (my_pin==MasterPin)
            {    OffFlag(factory_flag);
                AddServiceLog(MASTER_LOGIN);
                NEWS(stServiceMenu);
                return;
            }
            if (my_pin==FactoryPin)
            {    OnFlag(factory_flag);
                AddServiceLog(FACTORY_LOGIN);
                NEWS(stServiceMenu);
                break;
            }


Эти флаги потом тупо и банально анализируются при хождении по меню.
Код
            if (GetFlag(factory_flag))
            {     if    (service_number<stFactoryEnd)
                    service_number++;
                else
                    service_number=stServiceBegin;
            }
            else
            {    if    (service_number<stServiceEnd)
                    service_number++;
                else service_number=stServiceBegin;
            }


Короче, простое и тупое программирование.
Успехов sm.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Буратино
сообщение Apr 22 2011, 07:45
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Нет, это не правильный подход как мне кажется. А что если права доступа кучерявые, а что если пунктов меню тысячи? Я с трудом вкуриваю такие алгоритмы.

Значит вот что я решил:
все входные, по отношению к системе, воздействия я "завожу" в функцию "А", которая просто фильтрует эти воздействия в соответствии с правами доступа. Другими словами не пропускает далее по алгоритму ничего кроме того, что соответствует уровню доступа. Таким образом мы убираем лишние процессорные проверки и издержки в алгоритмах. Далее отфильтрованные воздействия попадают на функцию "Б" ,которая в зависимости от прав доступа и входного воздействия формирует команду. Функционал построен по смыслу, как обработчик команд и что важно построен для максимально возможных прав. Никаких проверок на права доступа в функциях и алгоритмах, все вынесено на вход системы. По поводу выходных интерфейсов ,пока не ясно , нужно применительно к задаче будет решать. В текущей работе можно обойтись и приведенной моделью.
Функцию А и Б можно было бы совместить, но явно просматривается необходимость просто фильтровать воздействие и строить команды на основе конкретного входного воздействия в совокупности с информацией о уровне доступа.


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Apr 22 2011, 08:29
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Буратино @ Apr 22 2011, 10:45) *
А что если права доступа кучерявые, а что если пунктов меню тысячи?

Тогда жаль sm.gif

Если права доступа растут монотонно, то нет проблем - мы их нумеруем по порядку возрастания прав, а каждому пункту меню присваеваем минимальный разрешенный "идентификатор права", с которым выполняется этот пункт. Если существующий идентификатор меньше - пункт не выполняется, если равен или больше - выполняется.
У меня и механизмы все заложены, нет только потребности.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
нечитатель
сообщение Apr 22 2011, 08:57
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 235
Регистрация: 20-11-10
Пользователь №: 61 032



Для настройки кучерявых прав нужен кучерявый человек. Который будет профессионально специализироваться на их настраивании.
А лошадь в вакууме умрёт, хоть даже она и сферическая. Потому что дышать нечем.
Go to the top of the page
 
+Quote Post
Буратино
сообщение Apr 22 2011, 11:19
Сообщение #14


Профессионал
*****

Группа: Свой
Сообщений: 1 433
Регистрация: 27-10-08
Из: Украина, Киев
Пользователь №: 41 215



Цитата(нечитатель @ Apr 22 2011, 11:57) *
Для настройки кучерявых прав нужен кучерявый человек. Который будет профессионально специализироваться на их настраивании.
А лошадь в вакууме умрёт, хоть даже она и сферическая. Потому что дышать нечем.


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

Цитата(Dog Pawlowa @ Apr 22 2011, 11:29) *
Тогда жаль sm.gif

Если права доступа растут монотонно, то нет проблем - мы их нумеруем по порядку возрастания прав, а каждому пункту меню присваеваем минимальный разрешенный "идентификатор права", с которым выполняется этот пункт. Если существующий идентификатор меньше - пункт не выполняется, если равен или больше - выполняется.
У меня и механизмы все заложены, нет только потребности.


Реализация конкретно меню пользователя это одна из возможных комбинаций функционала и прав доступа, и конкретно этим вопросом я пока не занимался. Однако ,как мне кажется, проверки на каждой из веток не оч. хорошая реализация. Но чтоб с уверенностью что-то сказать ,нужно сделать лучше.
Спасибо за участие в моем вопросе.


--------------------
Брак - это такой вид отношений, в которых один всегда прав, - а другой - муж.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Apr 22 2011, 11:47
Сообщение #15


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(Буратино @ Apr 22 2011, 14:19) *
Однако ,как мне кажется, проверки на каждой из веток не оч. хорошая реализация.

"Как мне кажется", в последнем своем сообщении я не говорил о проверке в каждой ветке.
Ветка имеет свойство "идентификатор доступа", а проверять его можно в одном месте, при переходе на ветку.
Спасибо, что выслушали wink.gif


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 14:31
Рейтинг@Mail.ru


Страница сгенерированна за 0.01521 секунд с 7
ELECTRONIX ©2004-2016