OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 09:54

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: Четверг, 11 Июль, 2019 19:53 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
Давно присматриваюсь к каркасу как средству создания промышленных ЧМИ. Могу представить как решить почти все необходимые задачи.
Однако есть и такая задача которую не могу понять как решить - разграничение прав пользователей.
Есть список пользователей, на каждого налагаются некоторое множество ограничений
(которые, в целом, можно свести к списку переменных модулей которе можно изменять и списку процедур которые можно вызывать).

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

Самое дубовое решение - реализовать специальные объекты-обертки, и менять значение через обращение к методу.
А если я захочу также ограничить доступ к некоторым процедурам? Снова объекты-обертки? Но ведь жирно...

Не понятно как средствами каркаса\языка ограничить доступ к глобальным переменным и процедурам
в зависимости от заданных прав пользователя. И возможно ли?

@Илья Ермаков: я знаю Вы реализовали несколько АСУ с ЧМИ на базе каркаса. Как решали такую задачу, если не секрет?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 11 Июль, 2019 20:55 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 583
Откуда: Москва
Сначала надо определиться с требованиями, потом как делать:
1. Если Ваша система с правами доступа каким-то образом сертифицируется как СЗИ (средство защиты информации), то лучше ввести в ОС разных пользователей, и от каждого запускать BlackBox со своими правами. Я так делал в SCADA для черного ящика.
2. Если Ваша система использует внешние ресурсы с СЗИ, например, СУБД, надо их же и использовать, организовав соответствующие сессии в ЧМИ.
3. Вы решили делать сами - сперва нужно определить модель разграничения доступа: дискреционную, мандатную или ролевую. Я предпочитаю ролевую - задать роли, у каждой роли права (+читать файлы, -записывать файлы, -подавать команды управления, -производить конфигурирование уставок, и т.д.). Вводить пользователей, каждому - своя роль. Ну идентификация, аутентификация, хранение/шифрование паролей средствами, предоставляемыми криптографическими библиотеками.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 11 Июль, 2019 22:41 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
Дмитрий, спасибо за интересную информацию.

Те системы с которыми работаю не относятся к СЗИ.

Смотрите, есть ПЛК с несколькими ПИД-регуляторами и набором рецептов. И есть пользователи АСУ с разными навыками и знаниями. Таких пользователей можно разбить на групппы, например "операторы" и "мастера". Первым нужно позвилить менять уставки, но запретить менять параметры ПИД или изменять рецепты. Вторые же могут изменять рецепты и подстраивать ПИД.

Без разницы где и как храняться данные (ПЛК, СУБД, файлы\память), но важно иметь возможность ограничить возможности пользователя в их модификации универсальным способом и так же нужно каждое изменение автоматически регистрировать в журнале (что, чем, кем, когда).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 11 Июль, 2019 23:22 

Зарегистрирован: Вторник, 01 Март, 2011 09:34
Сообщения: 583
Откуда: Москва
Тогда вариант 3 - ролевая система самостоятельно.
A. Вводите ролевой объект в систему, который определяет права на: уставки, параметры ПИД, рецепты.
B. Вводите роли: оператор, мастер, гость.
C. Вводите и храните список пользователей с ролью и паролем.
D. Управляете сессиями - логин, работа, выход из системы. В течении сессии ролевой объект устанавливается в определенную роль.
E. Все высокоуровневые методы доступа к данным должны сначала обращаться к ролевому объекту за разрешением.

Как-то так.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июль, 2019 00:22 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2662
Откуда: Россия, Ярославль
Ролевая модель устарела, сейчас можно "ролью" называть условные наборы действий, которые и являются базовыми единицами настройки доступа пользователя к системе, то есть "роль" может существовать только на этапе создания/редактирования пользователя, для упрощения процесса регистрации, а по факту будут наборы действий, причём параметризованные всякими "контекстными" штуками, типа, "вообще юзер может отключить проверку целостности при сохранении документа, но только если в прототипе она включена юзером, а не админом", такие правила ролями никак не описать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июль, 2019 10:41 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Рекомендую подумать о подходе, когда абстрактный интерфейс реализуется по-разному для разных пользователей.

Процедуры интерфейса управления оформляете с ключем EMPTY или EXTENSIBLE

Код:
Пустые методы (атрибут EMPTY)

Метод может быть объявлен как пустой (empty). Пустые методы являются расширяемыми. Пустые методы очень похож на асбтрактные в том, что они являются «заглушками» для функциональности, которая может быть предоставлена в дальнейших расширениях. Однако пустые методы являются конкретными и могут вызываться. Если они не расширялись (т.е. не были реализованы), то их вызов не дает никакого эффекта.


Доступ к данным делаете только через процедуры. Вызов которых разный в разных реализациях.

Плюсы в том, что не надо делать большую работу по авторизации пользователей, управлению группами и т.п. Более надежная защита. Так как "секретные" реализации кода недоступны пользователям с более низкими правами.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июль, 2019 14:13 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4695
Откуда: Россия, Орёл
hothing писал(а):
@Илья Ермаков: я знаю Вы реализовали несколько АСУ с ЧМИ на базе каркаса. Как решали такую задачу, если не секрет?

Отвечу я. Это не секрет: никак не решали. В рамках этих систем задача разграничения доступа не ставилась.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июль, 2019 20:16 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
Иван Денисов писал(а):
Рекомендую подумать о подходе, когда абстрактный интерфейс реализуется по-разному для разных пользователей...


Иван, спасибо за идею! Надо пробовать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 12 Июль, 2019 20:17 

Зарегистрирован: Среда, 31 Октябрь, 2007 18:58
Сообщения: 252
Откуда: Austria, Bruck
Борис Рюмшин писал(а):
Отвечу я. Это не секрет: никак не решали. В рамках этих систем задача разграничения доступа не ставилась.

Понятно, спасибо.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB