Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.10.08;
Скачать: CL | DM;

Вниз

Права пользователей в программе   Найти похожие ветки 

 
jiny   (2006-08-04 11:57) [0]

я создал программу складского учета, которая уже успешно применяется 1 год в одной организации, при этом права пользователей не учел, это большой минус, но тогда все создавалось быстро и некогда было думать о разграничении прав в программе.
Возникла проблема, из-за кривых и пытливых ручек пользователей, а именно : они лезут в журналы, в которые им не нужно открывать, изменяют цены на позиции, которые не в их компетенции и вообще открывают формы которые относятся к компетенции других отделов.
Вопрос следующий :
Какие существую алгоритмы/методы разграничения прав, как в 1С, например, где можно вплоть до каждой формы пользователю разрешить, либо запретить.
На уровне базы данных сделать можно, но только в FireBird, но сама программа крутится под Paradox, даже если доступ распределен на уровне базы данных, то программа все равно даст юзеру открыть определенную форму, где доступ к базе запрещен и это, я считаю немного неправильным. Как сделать так, чтобы данные о правах на определенные объекты (формы, эдиты, кнопки и т.д.) хранились в определенной таблице и как это вообще делается ? Это перед открытием каждой формы мне нужно сверяться с таблицей ролей и разрешений, есть ли разрешение у данной роли открывать эту форму или нет ?

Я представляю себе схему так :
1) создаю роли ;
2) задаю права на роли ;
3) создаю пользователей, где присваиваю им соответствующие роли ;
Каким образом это делается, пока не педставляю, долго искал в интернете примеры подобного, но так и не нашел ничего стоящего, надеюсь вы дадите мне советы, в каком направлении работать. Если будут ссылки - тоже буду признателен


 
ANB ©   (2006-08-04 11:59) [1]

Разграничение доступа на уровне клиента - вчерашний век. Пытливые пользователи тогда будут лазить в базу и править прямо там.
Совет - срочно переводи систему на Оракл XE, тогда сможешь защитить все на уровне БД. Способов для этого там - целая куча.


 
Johnmen ©   (2006-08-04 12:02) [2]


>  срочно переводи систему на Оракл XE


Хм... Это единственный вариант?


 
ANB ©   (2006-08-04 12:04) [3]


> Johnmen ©   (04.08.06 12:02) [2]

Нет, конечно, но мне он больше всего нравится :)


 
jiny   (2006-08-04 12:15) [4]

Допустим я перевожу базу не на ОРАКЛ, т.к. это сильно круто для организации, где всего 100 документов в день вноситься, да и лицензии не дешевые, а на FireBird. Представьте, что мой вопрос не касается db а уже FDB, как мне запретить доступ к конкретным формам, кнопкам на формах, закладкам пейджконтролов приложения, уже на уровне таблицы БД FireBird.
>>ANB ©   (04.08.06 11:59) [1]
>>Разграничение доступа на уровне клиента - вчерашний век. Пытливые
>>пользователи тогда будут лазить в базу и править прямо там.
Если я им дам роль(на уровне FireBird), которая будет видеть роли и права только на уровне select, то не будут.
Да и все-таки мне нравится разграничение ролей в 1С, хотелось бы освоить этот метод, даже для себя.


 
Desdechado ©   (2006-08-04 12:19) [5]

Разграничение прав на уровне данных и операций бизнес-логики вполне хорошо взаимодополняют друг друга. Поэтому заявлеие [1], имхо, несколько безапелляцоинно звучит. Если даже вся бизнес-логика на сервере, то даже в этом случае залезть в какой-то режим и не иметь возможности в нем что-то сделать несколько странно смотрится. Лучше уж совсем туда не пускать.

Автору
Самый простой вариант (не самый лучший, конечно) - это в БД прописать в спецтабличке список защищаемых элементов бизнес-логики (права на табличку только для чтения у пользователей). И группам/ролям соотнести, какие из них доступны для выполнения. Но это не отменяет защиту данных на уровне БД.


 
Dok   (2006-08-04 12:26) [6]

Да уж... Парава , права и еще раз права....
Отказаться от Парадокса и ему подобных...
Выбрать FireBird, MS SQL, Oracle - любую, слава богу есть бесплатные варианты.
Создать вьюхи, дать нужные права на них и спать спокойно + реализовать проверку на клиенте.


 
Petr V. Abramov ©   (2006-08-04 12:42) [7]

А аксесс перелить, там хоть как-то с правами разрулено.


 
Sergey13 ©   (2006-08-04 13:05) [8]

> [4] jiny   (04.08.06 12:15)
> как мне запретить доступ
> к конкретным формам, кнопкам на формах, закладкам пейджконтролов
> приложения, уже на уровне таблицы БД FireBird.
Например, можно перед визуализацией формы открывать основной запрос, в ней отображаемый. При неимении прав на какую либо таблицу запрос обломится. Надо поймать этот облом и культурно послать юзера в сад.


 
jiny   (2006-08-04 13:51) [9]

>>Dok   (04.08.06 12:26) [6]
>>Да уж... Парава , права и еще раз права....
>>Отказаться от Парадокса и ему подобных...
>>Выбрать FireBird, MS SQL, Oracle - любую, слава богу есть бесплатные
>>варианты.
>>Создать вьюхи, дать нужные права на них и спать спокойно + реализовать
>>проверку на клиенте.
Уж извините, пожалуйста за резкость, но это и ежу понятно, что надо, и это надо уже делается !

Desdechado ©   (04.08.06 12:19) [5]
Спасибо, мне тоже так кажется. Я в одной налоговой программе видел как разграничены права на объекты. Сервак там MS SQL, права на объекты, прописаны в таблице прав для ролей и каждый раз когда пользователь пытается сделать что-то не то, его обламывают, а в другой интерфейс пользователя формируется на основе этих же прав и не то что не дает ему обломится , а вообще не показывает того чего не следует, это же самое реализовано в 1С Конфигураторе.

>>Sergey13 ©   (04.08.06 13:05) [8]

> Например, можно перед визуализацией формы открывать основной
> запрос, в ней отображаемый. При неимении прав на какую либо
> таблицу запрос обломится. Надо поймать этот облом и культурно
> послать юзера в сад.

В принципе согласен, но как узнать, что форма FrmSomeForm использует таблицу tovar, а может она использует таблицу buh_docs_plat
я так думаю, что нужно создать в таблице структуру типа :
modul;FormName;TableName;CanSelect;CanModify
а есть вообще примеры подобного, может какие то наработки, я все приму с благодарностью !


 
Sergey13 ©   (2006-08-04 13:59) [10]

> я так думаю, что нужно создать в таблице структуру типа
> modul;FormName;TableName;CanSelect;CanModify

Можно и по этому пути пойти. Только структура, ИМХО, должна быть
Юзер (или роль)
Форма
Тип доступа (чтение/изменение)

Плюс (вернее минус) - при таком подходе нужен администратор этого программного комплекса и инструмент для его работы.


 
Dok   (2006-08-04 14:12) [11]


> Уж извините, пожалуйста за резкость, но это и ежу понятно,
>  что надо, и это надо уже делается !

Извини за резкость, тогда какого ты тут все долбаешь?


> modul;FormName;TableName;CanSelect;CanModify

RecordID, UserID, GroupID, CanRead, CanWrite, CanDelete, CanGrant


 
jiny   (2006-08-04 14:14) [12]

Я правильно понял ? хочу просто уточнить,
создаю таблицы:
1  PermissionsType, где указаны все объекты к разрешению
вот здесь ступор: только формы и контролы на форме указывать ? ну что-то типа :
 
 Форма;
 Контрол (если есть необходимость)

2  Roles, роли ;

3  FinalPermissions, подчиненная к Roles таблица, где указывается
роль и разрешение на конкретный объект, в итоге имеем список разрешений к конкретной роли
что-то типа :

Роль
Форма
Контрол (если есть необходимость)
Тип доступа (два поля, т.к. можно запретить пользователю вообще открывать Форму/таблицу)
4  Users, где есть поле принадлежности к той или иной роли


> Плюс (вернее минус) - при таком подходе нужен администратор
> этого
> программного комплекса и инструмент для его работы.

А насчет этого я не буду переживать , потому как все нас не убивает, делает нас сильнее (кажись так)
Администратор есть, только надо сделать инструмент


 
Dok   (2006-08-04 14:18) [13]


> 1  PermissionsType, где указаны все объекты к разрешению
> вот здесь ступор: только формы и контролы на форме указывать
> ? ну что-то типа :
>  
>  Форма;
>  Контрол (если есть необходимость)

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

> 2  Roles, роли ;

роли должны бить такими же пользователями.

> 3  FinalPermissions, подчиненная к Roles таблица, где указывается
> роль и разрешение на конкретный объект, в итоге имеем список
> разрешений к конкретной роли

забудь о скорости


 
jiny   (2006-08-04 14:27) [14]

>>Dok   (04.08.06 14:18) [13]
ты парень как то агрессивно настроен, никто тебе и не сказал что это постулат, которого надо придерживаться, это всего лишь догма, мое предположение, а насчет скорости, не думаю что из за 200 объектов доли секунд будут иметь большое значение, у меня остатки на товары из 6 логич.журналов формируются за доли секунды, причем товаров за одну выборку около 30, ну даже если это и так, буду искать оптимальный вариант. А высказываться типа :

> Да уж... Парава , права и еще раз права....
> Отказаться от Парадокса и ему подобных...
> Выбрать FireBird, MS SQL, Oracle - любую, слава богу есть
> бесплатные варианты.
> Создать вьюхи, дать нужные права на них и спать спокойно
> + реализовать проверку на клиенте.


Это не есть бред ? Когда у тебя просят совета, можешь - советуй, не можешь не советуй, а риторикой и я богат. Извини за прямоту.


 
Sergey13 ©   (2006-08-04 14:27) [15]

> [12] jiny   (04.08.06 14:14)

Я так думаю, что каждый контрол прописывать - лишнее. Он или есть или его нет - зависит от типа доступа читатель/писатель.


 
Dok   (2006-08-04 14:30) [16]


> не думаю что из за 200 объектов доли секунд будут иметь
> большое значение, у меня остатки на товары из 6 логич.журналов
> формируются за доли секунды, причем товаров за одну выборку
> около 30,

200 обьектов - записи или таблицы?
Ты не думай, ты возми сделай тесты: селект с условием где 3 ора (с подселектами) или селект с одним условием на миллионе записей.


> Это не есть бред ? Когда у тебя просят совета, можешь -
> советуй, не можешь не советуй, а риторикой и я богат. Извини
> за прямоту.

А можно уточнить - что Ваше Величество посчитало бредом?


 
jiny   (2006-08-04 15:09) [17]

>>Sergey13 ©   (04.08.06 14:27) [15]
Думаю ты прав, контролы это лишнее, хотя на их признак enabled или visible можно отметку поставить при проверке открытия формы.

>>Dok   (04.08.06 14:30) [16]
>>200 обьектов - записи или таблицы?
200 записей
Дальнейшую с тобой перепалку и остро-слово-метание вижу бессмысленными...


 
ANB ©   (2006-08-04 15:45) [18]


> jiny   (04.08.06 12:15) [4]

1. Oracle XE бесплатный. совсем.
2. Используя хранимую логику (пакеты), можно настроить гибкую систему доступа, используя любимые вами роли как в 1С :)


 
Desdechado ©   (2006-08-04 15:45) [19]

> Данными надо оперировать а не формами.
И снова здесь диагональный читатель. Прочти другую диагональ, а?
Начни с [5].


 
ANB ©   (2006-08-04 15:52) [20]

Автору - совет из опыта :
достаточно удобно строить список элементарных прав а к нему дерево ролей.
Но потом это дерево довольно медленно раскручивается и при постоянном к нему обращении вызывает тормоза.
В одном знакомом проекте вопрос решили просто - при коннекте к БД достаются права пользователя (раскрутка дерева ролей и прав), а потом это все складывается в плоскую временную таблицу уровня сессии. И уже в нее постоянно лазить. Получается удобно и шустро.


 
Dok   (2006-08-04 15:56) [21]


> Прочти другую диагональ, а?

пропроще будь, ок?


 
Jeer ©   (2006-08-04 16:17) [22]

Некоторое время я активно использовал DBISAM от elavatesoftware.com, т.к. был дистрибьютором и, вероятно, единственным в России.

Хорошая файл-серверная СУБД, все в одном exe, затем она развилась в C/S и развивается дальше.

Для разграничения прав пользователей была разработана соответствующая подсистема, доступ к которой имел администратор конкретной инсталляции.
Права сводились к ролям, в пределах которых назначались права (доступность) на пункты главного меню, права на конкретную форму и права на операции на данной форме, права на backup и restore, права на аудит.
Этого вполне хватило для устойчивой работы подобных приложений на многие годы.

Пример:
Для операций на форме (типовой) доступны разграничения прав:
- view;
- edit;
- append;
- delete;
- print;
- export;
- import;


 
ANB ©   (2006-08-04 18:04) [23]


> Jeer ©   (04.08.06 16:17) [22]

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

Например : "право на разрешение подчиненному отдать товар в долг покупателю, который не полностью расчитался за предыдущие поставки".

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


 
jiny   (2006-08-05 13:12) [24]

В принципе я мог бы решить все на уровне БД, определенная часть бизнес-логики уже выполняется на сервере, с распределением прав для юзеров и ролей нет. ИМХО, что на FireBird, что Oracle, а также в MSSQL принцип раздачи прав примерно одинаков, где то больше дополнительных возможностей, где то меньше (если не вдаваться в подробности), но это никак не сказывается на интерфейсной части программы, и как сказал

> Desdechado ©   (04.08.06 12:19) [5]
> Разграничение прав на уровне данных и операций бизнес-логики
> вполне хорошо взаимодополняют друг друга.

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


 
jiny   (2006-08-05 13:14) [25]

Ошибочка вышла, прошу прощения :

> В принципе я мог бы решить все на уровне БД, определенная
> часть бизнес-логики уже выполняется на сервере, с распределением
> прав для юзеров и ролей ПРОБЛЕМ нет.


 
Dok   (2006-08-05 14:40) [26]


> ИМХО, что на FireBird, что Oracle, а также в MSSQL принцип
> раздачи прав примерно одинаков

глубоко заблуждаешся. читай мануал по каждой СУБД. FireBird сильно проигрывает.  MS SQL проигрывает Oracle.

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

скроее наоборот. дополнять должна программа(клиент) а не база данных.
и не в какой-нибудь таблице БД - а таких таблиц сколько, сколько таблиц предлагается администрировать.


 
Desdechado ©   (2006-08-07 11:26) [27]

> и не в какой-нибудь таблице БД - а таких таблиц сколько,
>  сколько таблиц предлагается администрировать.
А по-русски? А то не вник в поток сознания...


 
Dok   (2006-08-07 12:07) [28]

Для каждой таблицы которая будет администрироваться создавать еще одну - права.


 
Desdechado ©   (2006-08-07 12:23) [29]

Dok   (07.08.06 12:07) [28]
Ты откуда такое выдумал?!

Речь шла о правах на бизнес-операции (читай: программы, режимы, кнопки). Для этого достаточно одной таблицы.
А для таблиц в БД не нужно ничего городить дополнительно для раздачи прав на чтение/запись. Это уже есть все в штатных механизмах СУБД, в ее системных таблицах.


 
Neo Trinitron ©   (2006-08-07 13:25) [30]

jiny, имхо проще пересесть на нормальную СУБД. Преимущества - все. Недостатков - нет. OracleXE - бесплатна! За чем остановка? Велосипед уже давно изобретён и модифицирован до уровня сверхзвукового гоночного агрегата с турбоподдувом! Я бы стопудуво перевёл базу, ну, хотябы на MS Access, это на самый худой случай. А так OracleXE - куколка! И чего только пользователям надо? Бесплатная, а всё равно впадлу брать...


 
Desdechado ©   (2006-08-07 13:43) [31]

Neo Trinitron ©   (07.08.06 13:25) [30]
Иногда встречается такая редкая форма насилия - требование заказчика.


 
Neo Trinitron ©   (2006-08-07 13:52) [32]

>Иногда встречается такая редкая форма насилия - требование заказчика.

Тогда заказчик должен согласиться с тем что безопастность будет охранять базу от деток, но уж никак не от юзеров с шаловливыми ручками, и не морочить светлую голову программера! Конечно и мне хотелось бы из москвича бумер сделать, однако, проще купить тот самый бумер. Однажды я работал юзверем. Была очень хитрая система (dbf) с массой ловушек и всяких причандалов типо безопасность :) За два дня работы я понял что и где там нужно поменять чтобы мне было хорошо :) Именно тогда я понял что никогда не буду делать программу основаную на dbf. Проще отказаться от проэкта чем заниматься такой хренью. Вот у меня заказчики тоже хотели dbf, мол это формат который они знают. Я ответил что это не ко мне, предложил MS Access, обьяснил - согласились, ещё и спасибо сказали. А если бы не согласились, что других заказчиков нет?


 
MsGuns ©   (2006-08-07 13:56) [33]

>они лезут в журналы, в которые им не нужно открывать, изменяют цены на позиции, которые не в их компетенции и вообще открывают формы которые относятся к компетенции других отделов

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

"Разруха - она в головах" (с)


 
Dok   (2006-08-07 14:26) [34]


> Речь шла о правах на бизнес-операции (читай: программы,
> режимы, кнопки). Для этого достаточно одной таблицы.

действительно, мы говорили просто о разных весчах.

> А для таблиц в БД не нужно ничего городить дополнительно
> для раздачи прав на чтение/запись. Это уже есть все в штатных
> механизмах СУБД, в ее системных таблицах.
>

это смотря как реализованны пользователи.


 
ANB ©   (2006-08-07 14:49) [35]


> Бардак на складе не лечится ролями.

Но ими он хотя бы частично предотвращается. А если система вообще не имеет защиты - то это приглашение к ее ломанию.


 
jiny   (2006-08-08 14:26) [36]

Прошу прощения был в отъезде, но кое что в дороге успел сделать.
Работы по переводу на FireBird велись мной уже давно,
пробные перебросы делались и нарабатывалась логика на серваке,
вчера окончательно перевел всю программу на FireBird, но не решило всех задач. Создал роли, установил разрешения, привязал пользователей к ролям, но даже если какой-нить юзер попытается лазить в какой-нить журнал документов, СБД ему, конечно, запрет ставит, но сам тот факт, что ссылка на форму журнала дает ему программа меня коробит, так что, все-так без бизнес логики приложения не обойтись (настройка меню и доступ к формам).

> Neo Trinitron ©   (07.08.06 13:25) [30]
> jiny, имхо проще пересесть на нормальную СУБД. Преимущества
> - все. Недостатков - нет. OracleXE - бесплатна! За чем остановка?
>
>
Насчет этого с тобой полностью согласен, но дело в том что я не особенно знаком с Oracle, поэтому боюсь навредить, с FireBird - попроще, в том смысле, что я его уже знаю.
Уроки по Oracle скачал, но пока все некогда засесть за изучение.



 
Sergey13 ©   (2006-08-08 14:30) [37]

> [36] jiny   (08.08.06 14:26)

Ничего такого супер-пуперного Оракл в этом плане не даст. И ни один сервак не даст, ИМХО. Не его это дело - менюшки рисовать. Хочешь - сам рисуй это в БД и пиши функционал.


 
jiny   (2006-08-08 14:35) [38]

>>Sergey13 ©   (08.08.06 14:30) [37]
Вот и я о том же, но многие мне все равно твердят, что переходи на другой СБД, как ты и сказал ничего он не даст нового, вот так никто примерчика и не дал...неужели никто с этим не сталкивался ?!


 
Sergey13 ©   (2006-08-08 14:41) [39]

> [38] jiny   (08.08.06 14:35)
> Вот и я о том же, но многие мне все равно твердят, что переходи
> на другой СБД,
Некоторые при всех проблемах, советуют винду переставлять. Всем таким советам следовать - работать некогда будет. 8-)

> вот так никто примерчика и не дал...неужели никто с этим
> не сталкивался ?!
Какой примерчик то? У тебя в [12] jiny   (04.08.06 14:14) все нормально "придумано" (с учетом  [17] jiny   (04.08.06 15:09) ). Вот и твори.


 
jiny   (2006-08-08 14:46) [40]

>>Sergey13 ©   (08.08.06 14:41) [39]
уговорил, да я то уже начал творить, практически заканчиваю, осталось все обхекты вбить в таб и программе предв. проверку включить,
просто, люблю я на чужие примерчики посмотреть, авось что-нить новое увижу.
Ну ладно, я так думаю сессию можно считать закрытой, но если у кого, есть что сказать по данной теме - всегда буду рад выслушать любые советы,
всем спасибо ! :)



Страницы: 1 2 вся ветка

Текущий архив: 2006.10.08;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.036 c
15-1158316984
Тульский
2006-09-15 14:43
2006.10.08
Visual Prolog


6-1147423933
Alek
2006-05-12 12:52
2006.10.08
скорость закачки


3-1155172585
Александр007
2006-08-10 05:16
2006.10.08
Доступ к чужой базе Paradox


3-1154862962
serko
2006-08-06 15:16
2006.10.08
Найти далее и др.


11-1134025665
Boguslaw Brandys
2005-12-08 10:07
2006.10.08
KOlOledb