Подскажите идею разграничения доступа



Posted by Васеленко Сергей, Фирма КАРДИНАЛ on August 27, 1999 at 02:36:22:

Уважаемые коллеги!

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

К примеру, форма Х содержит несколько отчетов:
- Отчет директора
- Отчет менеджера
- Отчет оператора

Все отчеты строятся по одному алгоритму, но выводятся разные строки и разные колонки в зависимости от статуса пользователя.

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

При этом в формах следует закоментарить соответствующие недоступные пункты.

Хотелось бы, чтобы при модернизации одного отчета, вероятно, полного, остальные обновлялись автоматически.
Это можно реализовать примерно так:

Вставить фрагменты:
J1=1 Разрешение выполнять первый отчет
J2=1 Разрешение выполнять второй отчет
J3=1 Разрешение выполнять третий отчет

и в форме проверять, можно выполнять или нет.

При этом можно написать командный файл, который бы копировал форму X в формы X1,X2,X3 и проводил соответствующие замены, например для X3:
J1=0
J2=0 и т.д.

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

Например,
J1=[ged 'RIGTHS|'+[user]+'|X|J1'] Разрешение выполнять первый отчет
J2=[ged 'RIGTHS|'+[user]+'|X|J2'] Разрешение выполнять второй отчет
J3=[ged 'RIGTHS|'+[user]+'|X|J3'] Разрешение выполнять третий отчет

и т.д.

А устанавливать эти права из специальной формы RIGHTS.RPT, на которую дать права администратору.

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

Последнюю можно усложнить, считывая параметры доступа из экстра-параметров, которые меняются только из журнала.

Может быть вообще следует прописывать права в файле FIRST.RPT (те же J1=..., J2=... в зависимости от [user]).

Жесткий надежный способ, но FIRST.RPT не очень хорош, т.к. мы постоянно обновляем его нашим клиентам, и могут возникнуть конфликты при неправильном обновлении его клиентами.
Решением, вероятно, стало бы включение внешних файлов в отчетные формы, т.е. к примеру мы поставляем FIRST.RPT, в который включен RIGHTS.RPT, и уже в последнем клиенты расписывают права своих пользователей.


Может быть, удачное решение есть расширение директивы R в файле прав пользователей.
К примеру,
Для директора:
R X
Для менеджера:
R X ·2·, X ·3·
Для оператора:
R X ·3·

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


Все приведенные решения требуют либо доработки сервера, либо обладают недостатками, либо хитростями.

Может быть, у кого-либо есть красивое, эффективное решение сейчас.
Буду очень признателен.



Пpишедшие ответы: