Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Горячая тема (более 10 ответов) Роли, доступы, наборы прав (число прочтений - 3982 )
Login_ID
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 11. Сентября 2009
Роли, доступы, наборы прав
11. Сентября 2009 :: 07:58
Печать  
Мысль:
Реализация 1с77 доступа к объектам, как видится, по следующей схеме: НаборПрав(пример "Кладовщик") - Объект ("док. накладная")- ТипДоступа("Ввод Нового") - 1/0 (разрешено запрещено)
Вставить бы в эту последовательность после "1/0" возможность запуска произвольного кода на языке 77, с возвратом 1/0 а дальше по схеме.
Что даст: подобие контекстных права. По контексту объектов.
К примеру:

Код
Выбрать все
Если глПользователь.Роль("Кладовщик").Склад = ОбъектДоступа.Реквизит("Склад").Значение Тогда
    Возврат 1;
Иначе
    Возврат 0;
КонецЕсли;
 


Озадачен
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Роли, доступы, наборы прав
Ответ #1 - 11. Сентября 2009 :: 10:03
Печать  
Я как раз пытаюсь реализовать контроль прав по похожему алгоритму. К схеме поясню:

События - стандартные и нестандартные события объектов и ГМ (класс Перехватчик).
Обработчики - процедуры, которые выполняются при возникновении события, возвращают 0/1 или/и выполняют дополнительные действия (класс ВыполняемыйМодуль).

Все действия, включая создание обработчиков, производятся из режима 1С:Предприятие. Конфигуратор не задействуется.
Количество обработчиков к одному событию неограничено.
Главное правило при формировании конечного мнения об открытии/запрете доступа (на основании совокупности обработчиков, наборов обработчиков, групп пользователей - которая формируется для пользователя при возникновении события) - что не запрещено, то разрешено. То есть если при открытии документа 5 обработчиков разрешили доступ (вернули 1), а один запретил (вернул 0), то открытие документа запрещается. Если ни один из обработчиков не возразил, или если для данного события пользователю не назначено обработчиков - то доступ разрешается.
Если обработчиков для события несколько, то они выполняются в определенном порядке, который можно изменять. Каждый обработчик независим сам по себе, но они могут обмениваться некими данными через глобальную структуру (скажем один обработчик при открытии документа сохранил значение реквизита "Контрагент" в структуре, затем другой обработчик при записи документа сравнил сохраненное значение с текущим). Обработчики также могут изменять представление (реквизиты) формы.
  

___________001.jpg ( 62 KB | Загрузки )
___________001.jpg
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Роли, доступы, наборы прав
Ответ #2 - 11. Сентября 2009 :: 10:10
Печать  
maljaev, и как успехи?

Не пробовал схему, реализованную в СКАТе?
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Роли, доступы, наборы прав
Ответ #3 - 11. Сентября 2009 :: 10:15
Печать  
Скатовскую схему не пробовал, честно говоря и не видел даже. надо глянуть...

Разработка у меня сейчас на стадии формирования интерфейса. Изначально попробовал/обкатал все внутренние механизмы, связанные с перехватом событий, выполнением произвольного кода и обработкой результатов - после некоторых мучений все получилось и стало понятно что решение имеет место быть. На создание юзабильного интерфейса как всегда кладу максимум усилий, даже больше - т.к. планирую сделать решение полуплатным (то есть для небольших структур бесплатным а для больших платным).

Кстати, для автора темы: наборы обработчиков и группы пользователей выполняют похожую функцию что и роли.
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Роли, доступы, наборы прав
Ответ #4 - 11. Сентября 2009 :: 10:58
Печать  
А, забыл добавить: будут еще множества, которые также будут создаваться и заполняться пользователем, в которых будет содержаться некий набор объектов разных типов. Можно будет в обработчике написать:

Если ПринадлежитМножеству(Объект,"ЭлементыСправочниковЗапрещенныхДляИзменений")=1 Тогда
     Доступ=0;
КонецЕсли;

Если ПринадлежитМножеству(Объект.Вид(),"ДокументыПоКассе")=1 Тогда
     Доступ=0;
КонецЕсли;

Если ПринадлежитМножеству(Пользователь,"Администраторы")=0 Тогда
     Форма.ДатаДок.Доступность(0);
КонецЕсли;
  
Наверх
 
IP записан
 
Login_ID
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 11. Сентября 2009
Re: Роли, доступы, наборы прав
Ответ #5 - 11. Сентября 2009 :: 11:09
Печать  
да тут вообще шальные мысли...  Очень довольный

Самая общая схема реализации ролей что в голову пришла:

1) Есть глПользователь - он же пользователь (фактически логин/пароль).
к пользователю привязываем некий объект РОЛИ, который определяет все роли, назначенные глПользователь. (параметры сеанса, фактически).

2) Каждая роль - это типа вектор доступа к объектам (доки, справочники и пр).
В общем случае Роль - вещь параметрическая. (то есть Кладовщик - склада, ГлБух - Организации, Сотрудник - отдела).

3) Есть Объекты (доки, спр и т.д.) которые тоже параметрические.
Для каждого Объекта определен список доступов к нему (запись, чтение и пр.)
Для каждого Объекта в разрезе доступов к инфо задаются его список параметров:
   а) влияющие на доступ,
   б) зависящие от доступа.
(К примеру журнал доков организации А, (организация А - влияющая на доступ (разрешить/запретить)), выводить только доки сотрудников отдела Б (значение отбора - зависящее от доступа).

4) Есть матрица отношения Роли(Параметры) и Объектов(Параметры)  в конечном итоге и определяющая возможность доступа.

При реализации этой схемы написание конфы с ролями идет комфортно. Объекты пишутся так, как будто доступ к объектам полный. Я как разработчег в этот момент вообще о доступах не парюсь. Т.е. конструкций типа:
Код
Выбрать все
Если глПользователь.Кладовщик  <> 1 Тогда
   СтатусВозврата(0);
   Возврат;
КонецЕсли;
Если глДоступныеСклады.НайтиЗначение(Склад) = 0 Тогда
   СтатусВозврата(0);
   Возврат;
КонецЕсли;
 

не пишу.

При таком подходе доступ к объекту и параметры будут проставлены автоматически, согласно правилам из матрицы отношений Ролей и Объектов. Но это коммунизм.

Если вынести из кода хотя бы ту часть стандартных доступов к объектам 1с что там уже реализована платформой, уже б стало намного проще писать поведение объектов. Котлеты и не котлеты уже б разделились...

Пока в коде все в куче и роли и не роли и это не камильфо никак.
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Роли, доступы, наборы прав
Ответ #6 - 11. Сентября 2009 :: 11:24
Печать  
Ты смотришь на задачу как разработчик в плане реализации в  своей конфирурации.

Я же смотрю на задачу с целью дать рядовым пользователям механизм для того чтобы гибко настраивать доступ и изменять поведение программы, без изменения типовых конфигураций. Возникает такая потребность у главбухов, директоров и прочего управленческого состава, и приходится каждый раз менять конфигурацию (и притом самому, что лениво  Улыбка).

Ну а в плане того чтобы в зависимости от уровня доступа выдавать только необходимый набор записей или полей - в плане 7.7 вообще малореализуемо. Можно конечно сделать, если воспользоваться табличными полями, SQL, и весь доступ к данным прогонять через свои запросы - но это когда конфу с нуля пишешь, для типовых нереально. Да и стандартный функционал - формы справочников, документов, журналов и т.д. - придется полностью заменять на обработки. А если от базового функционала мало что остается - то нафиг он тогда нужен, не легче ли поискать другую платформу?
  
Наверх
 
IP записан
 
Login_ID
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 7
Зарегистрирован: 11. Сентября 2009
Re: Роли, доступы, наборы прав
Ответ #7 - 11. Сентября 2009 :: 14:42
Печать  
Фактически контекстный фильтр на доступ к событиям объекта?
Объекты оставляем как есть, или если пишем с нуля то как будто бы доступ к данным событиям объекта полный?
Все конструкции типа:
Код
Выбрать все
Процедура ПриОткрытии()
    Если А=Б Тогда
	 СтатусВозврата(0); Возврат;
   КонецЕсли;
КонецПроцедуры
 


в отдельный модуль?

Дело.

(все таки идея прорваться к доступам 77 будоражит мозг)

Если накладывать идею ролей на конфу в виде прописания всего поведения в модулях объектов, то это таким тонким слоем размазывается по объектам конфы, что введение одной доп роли это гимор. Язык
  
Наверх
 
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Роли, доступы, наборы прав
Ответ #8 - 13. Сентября 2009 :: 20:40
Печать  
Login_ID писал(а) 11. Сентября 2009 :: 14:42:
Фактически контекстный фильтр на доступ к событиям объекта?
Объекты оставляем как есть, или если пишем с нуля то как будто бы доступ к данным событиям объекта полный?
Все конструкции типа:
Код
Выбрать все
Процедура ПриОткрытии()
    Если А=Б Тогда
	 СтатусВозврата(0); Возврат;
   КонецЕсли;
КонецПроцедуры
 


в отдельный модуль?

Дело.

(все таки идея прорваться к доступам 77 будоражит мозг)

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

Может я конечно не совсем понял о чем речь но по моему вы забыли об объекте "Перехватчик" Что мешает не дать открыть ЛЮБУЮ форму вернув "0" из события  "Перехватчика". Будет без проблем работать в любой конфе, в т.ч. и в типовой, без изменений. Особенно если хранить Права снаружи конфы. У меня они хранятся в справочнике "Константы" подчиненном справочнику "Пользователи".... но никто не мешает хранить их в любом хроанилище, хоть в том-же xml....
  
Наверх
ICQ  
IP записан
 
avgreen
Senior Member
****
Отсутствует



Сообщений: 254
Местоположение: Украина, Кривой Рог
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Роли, доступы, наборы прав
Ответ #9 - 13. Сентября 2009 :: 20:54
Печать  
maljaev писал(а) 11. Сентября 2009 :: 11:24:
Ты смотришь на задачу как разработчик в плане реализации в  своей конфирурации.

Я же смотрю на задачу с целью дать рядовым пользователям механизм для того чтобы гибко настраивать доступ и изменять поведение программы, без изменения типовых конфигураций. Возникает такая потребность у главбухов, директоров и прочего управленческого состава, и приходится каждый раз менять конфигурацию (и притом самому, что лениво  Улыбка).

Ну а в плане того чтобы в зависимости от уровня доступа выдавать только необходимый набор записей или полей - в плане 7.7 вообще малореализуемо. Можно конечно сделать, если воспользоваться табличными полями, SQL, и весь доступ к данным прогонять через свои запросы - но это когда конфу с нуля пишешь, для типовых нереально. Да и стандартный функционал - формы справочников, документов, журналов и т.д. - придется полностью заменять на обработки. А если от базового функционала мало что остается - то нафиг он тогда нужен, не легче ли поискать другую платформу?

Ну в плане "прав на просмотр" то таки-да, без глобального изменения конфы не обойтись. Но IMHO это справедливо не только для 7.7 а и для 8.х. (да я думаю не только для 1С а и для любой системы) Более того "права на изменение", которые в 7.7 легко реализуются с помощью "Перехватчика", в 8.x, опять-же IMHO, реализовать не получится ....

PS - Все измышления о возможности/невозможности рассматриваются в плане присоединения к готовой (типовой) конфигурации без ее изменения
  
Наверх
ICQ  
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Роли, доступы, наборы прав
Ответ #10 - 14. Сентября 2009 :: 08:47
Печать  
avgreen, ты видимо действительно не совсем понял. Все события, которые отрабатываются перехватчиком (открытие, запись, проведение, и еще куева туча событий) - все реализуется относительно легко без изменения конфигурации. Чем я сейчас и занимаюсь.

Login_ID же хочет, чтобы скажем журнал документов фильтровался в рамках роли, т.е. выводились например только те документы, у которых контрагенты и склады соответствуют разрешенным данной роли. Более того, если скажем формируется отчет, то необходимо послать пользователя подальше если встречается счет "50.1". Более того, не нужно забывать что доступ к объектам может быть интерактивным а может и программным. В общем человек хочет те же возможности по доступу к данным как в 1С81, но только в 1С77.
  
Наверх
 
IP записан
 
maljaev
Senior Member
****
Отсутствует


Классический секс с 1С
надоел. Хочется изврата...

Сообщений: 405
Местоположение: Нижний Новгород
Зарегистрирован: 19. Октября 2006
Пол: Мужской
Re: Роли, доступы, наборы прав
Ответ #11 - 14. Сентября 2009 :: 08:53
Печать  
Вообще подобный механизм можно реализовать только одним надежным путем: перехватить запрос 1С на доступ к Record (Row) - строке таблицы данных, и далее в зависимости от условий либо дать доступ либо не дать.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать