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

Вниз

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

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

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


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

> [38] jiny   (08.08.06 14:35)

Можно, кстати, еще проще поступить. Проанализировать текущую роль юзера и по результату рисовать менюшки/формочки. Не думаю, что этих ролей будет много для одного exe-шника.


 
Neo Trinitron ©   (2006-08-08 14:50) [42]

Значит так, доступ на сервере нужно разграничить по максимуму, на клиенте можно извращаться как угодно. Это уже дело фантазии. А если завтра нужно будет клиента переписать, web приложение забецать, например, то все останутся довольны ибо логика не изменилась. Даже если у них откроется форма с данными которые они не могут даже читать, то данные они всё равно не увидят.


 
jiny   (2006-08-08 14:54) [43]

В принципе я по этому пути и пошел, но в голове зудит одна мысль "как же сделать настройку меню как в 1С" - такую же гибкую ! я предполагаю, что пока будет всего 11 ролей :
СуперАдмин
Админ
Директор
Менеджер по закупу
Менеджер по продажам
Менеджер по сертификации
Гл.бухгалтер
Бухгалтер
Кассир
Аналитик
Контролер


 
jiny   (2006-08-08 14:58) [44]

>>Neo Trinitron ©   (08.08.06 14:50) [42]
Вот насчет этого у меня уже руки чешуться, в принципе Веба тоже нужна на будущее ! (спасибо за мысль), тогда точно на Оракл переходить буду, т.к. говорят что там в плане прав/привилегий ширше можно думать ...:)


 
Sergey13 ©   (2006-08-08 14:59) [45]

> [43] jiny   (08.08.06 14:54)

Ну и храни меню в БД - в чем проблема то? Так можно даже, что бы юзера сами себе менюшку рисовали.

ЗЫ: Только лишнее это все ИМХО. Работы добавляет, а функционала нет.


 
jiny   (2006-08-08 15:07) [46]

>>Sergey13 ©   (08.08.06 14:59) [45]
>>Ну и храни меню в БД - в чем проблема то? Так можно даже, что бы >>
>>юзера сами себе менюшку рисовали.
ты имеешь ввиду в блобе ?
>>ЗЫ: Только лишнее это все ИМХО. Работы добавляет, а функционала нет.
согласен, зато юзеры меньше проблем будут создавать


 
Sergey13 ©   (2006-08-08 15:12) [47]

> [46] jiny   (08.08.06 15:07)
> ты имеешь ввиду в блобе ?
Зачем? В иерархической таблице.

> согласен, зато юзеры меньше проблем будут создавать
Думаешь? Я думаю наоборот. Это как с покупкой товара: есть один вид - берешь и идешь в кассу, есть 10 видов одного и того-же - стоишь полчаса и думаешь, что взять. 8-)


 
jiny   (2006-08-08 15:14) [48]

>>Sergey13 ©   (08.08.06 15:12) [47]
не знаю, но в 1С мне эта фича нравится, может и не надо так углубляться...


 
evvcom ©   (2006-08-08 15:26) [49]

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

Мы подобные наработки пишем уже больше года. Правда, в этом интервале времени не только наработки с правами, но и весь функционал. За это я все время получал неплохую заработную плату. Как ты думаешь, я имею право поделиться с тобой этими наработками?

> [20] ANB ©   (04.08.06 15:52)

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

> [22] Jeer ©   (04.08.06 16:17)
> назначались права (доступность) на пункты главного меню,
> права на конкретную форму и права на операции на данной
> форме

Мы привязываем пункт меню к форме, форму к некоему логическому объекту. Все это, а также пользователи, роли, полномочия (точнее их допустимые значения - select, update, delete, import, export и др.) и многое другое лежит в одной таблице. В другой таблице связей повязаны роли с пользователями и ролями, роли и/или пользователи с объектами и полномочиями. Благо в оракле реализован древовидный select! Запрос получился довольно сложный, но достаточно шустрый (меньше 0,2 сек, причем подозреваю, что в основном это время тратится на fetch строк с сервера).

> [23] ANB ©   (04.08.06 18:04)
> что в эту схему бы не уложились

Сомневаюсь. Что мешает добавить в систему полномочие РазрешениеОтдатьТоварВДолгПокупателюКоторыйНеПолностьюРасчиталсяЗаПредыдущиеПост авки и привязать его именно к действию на соответствующей форме?

> Правда к их минусу вся эта защита на клиенте была реализована

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

> [34] Dok   (07.08.06 14:26)
> это смотря как реализованны пользователи.

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


 
ANB ©   (2006-08-08 16:12) [50]


> Что мешает добавить в систему полномочие РазрешениеОтдатьТоварВДолгПокупателюКоторыйНеПолностьюРасчиталсяЗаПредыдущиеПост  
> авки и привязать его именно к действию на соответствующей
> форме?

Хорошей идеей МВ была сущность "Контрольная точка". Она могла быть в состоянии "Нету", "Есть", "Есть, но под добро начальника", "Возможность давать добро подчиненным". Имея эту инфу можно организовывать сколь угодно сложную логику взаимодействия, в том числе и на уровне хранимок. И опять же по опыту, когда число таких прав накопилось за 5 тысяч и повялось большое количество перекрестных и вложенных привязок, запрос стал немного притормаживать. Никто даже не пытался завязать этот запрос на фильтрацию данных. А в случае плоской временной таблицы - это вполне можно сделать. Кстати, сам оракл в системных вьюхах фильтрует доступ привязкой к правам. А запрос с connect by по линковке особо то не напишешь.


 
evvcom ©   (2006-08-08 16:52) [51]

> [50] ANB ©   (08.08.06 16:12)

connect by я реализовал во вьюхе для определения к какой группе (ветви) относится запись в таблице. То ли это роль, то ли юзер, то ли меню, то ли форма и т.д. А уж далее таблица линков джойнится многократно с этим селектом, pipelined функция пакета выбирает данные и записывает анализируя их в table of TMyType index by binary_integer; и возвращает хитро обработанные строки запросу.
У меня сейчас, правда, еще не 5 тыс. прав (в смысле ролей?), но 1 тыс. записей в структуре объектов и 3,5 тыс. в таблице связей, тоже всевозможные перекрестные связи реализованы, запрос, возвращая сотню связок объект-полномочие, выполняется за 0,2 сек. Меня пока устраивает, хотя первоначальный вариант я уже переделывал с целью оптимизации скорости выполнения.


 
ANB ©   (2006-08-08 16:56) [52]


> evvcom ©   (08.08.06 16:52) [51]

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


 
evvcom ©   (2006-08-08 17:22) [53]

> [52] ANB ©   (08.08.06 16:56)
> то будет все равно не шустро

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

> если ты сджойнишь большую табличку

А что может быть в этой табличке? У меня сейчас реально джойнится эта функция 4 раза с таблицей-структурой объектов. 1 тыс. записей, конечно, не назовешь большой табличкой, но тем не менее, если количество этих объектов вырастет и до 10 тыс. (что тоже немного, но куда уж больше-то объектов?!), думаю, разницы большой не будет.

> А индексированная времянка - самое оно. Впрочем, я не навязываюсь :)

А нужен он здесь индекс-то? Впрочем, я тоже не спорю :)


 
jiny   (2006-08-09 13:36) [54]

evvcom ©   (08.08.06 15:26) [49]

> Мы подобные наработки пишем уже больше года. Правда, в этом
> интервале времени не только наработки с правами, но и весь
> функционал. За это я все время получал неплохую заработную
> плату. Как ты думаешь, я имею право поделиться с тобой этими
> наработками?

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


> Мы привязываем пункт меню к форме, форму к некоему логическому
> объекту. Все это, а также пользователи, роли, полномочия
> (точнее их допустимые значения - select, update, delete,
>  import, export и др.) и многое другое лежит в одной таблице.
>  В другой таблице связей повязаны роли с пользователями
> и ролями, роли и/или пользователи с объектами и полномочиями

можно попросить стуктуру табл., хотя бы на e-mail, на всякий пожарный выкладываю сви структуры, получилось 3 табл.
роли
CREATE TABLE USER_ROLES (
   ID         INTEGER,
   ROLE_NAME  VARCHAR(20) COLLATE PXW_CYRL,
   ROLE_DESC  VARCHAR(30) COLLATE PXW_CYRL
);

доступные объекты в программе
CREATE TABLE USER_PERMISSIONS (
   ID            INTEGER,
   NAME_FORM     VARCHAR(150) COLLATE PXW_CYRL,
   DESC_FORM     VARCHAR(150) COLLATE PXW_CYRL,
   NAME_TABLE    VARCHAR(150) COLLATE PXW_CYRL,
   DESC_TABLE    VARCHAR(150) COLLATE PXW_CYRL,
   NAME_CONTROL  VARCHAR(150) COLLATE PXW_CYRL,
   DESC_CONTROL  VARCHAR(150) COLLATE PXW_CYRL
);


Финальные разрешения для ролей
CREATE TABLE USER_PERMISSIONS_FINAL (
   ID             INTEGER,
   ROLE_NAME      VARCHAR(20),
   ID_Object  INTEGER,
   CANOPEN        SMALLINT DEFAULT 0,
   CANSELECT      SMALLINT DEFAULT 0,
   CANINSERT      SMALLINT DEFAULT 0,
   CANUPDATE      SMALLINT DEFAULT 0,
   CANDELETE      SMALLINT DEFAULT 0,
   CANGRANT       SMALLINT DEFAULT 0
   CANIMPORT     SMALLINT DEFAULT 0,
   CANEXORT      SMALLINT DEFAULT 0,
   CANPRINT      SMALLINT DEFAULT 0
);


ну и табл. users, где идет привязка юзеров к ролям
может кто-то хочет дополнить/сократить структуру таблиц ?


 
Neo Trinitron ©   (2006-08-10 10:10) [55]

ИМХО на форуме вопросов о реализации целой подсистемы не стоит задавать, на то и есть профессия программиста. Форум подходит скорее для помощи в случае если не получается что-то небольшое, такой себе гвоздик который не удаётся вытащить, из-за чего останавливается разработка всего проэкта. Автор, Вам тут советов понадавали на три проэкта. Вам написать подсистему? Легко! Но нужно договориться об оплате. Удачи.


 
evvcom ©   (2006-08-10 11:37) [56]

> [54] jiny   (09.08.06 13:36)
> и как видится я - вам не конкурент

Фу (облегченно) ... Успокоил. А то уж я весь на измене, а вдруг подсидишь? :)

> можно попросить стуктуру табл.,

Ну к примеру:
create table ADM_STRUCTURE
(
 PK            NUMBER not null,
 PARENT        NUMBER,
 IDX           NUMBER not null,
 IDENT         VARCHAR2(50),
 ALIAS         VARCHAR2(60),
 LINK          NUMBER,
 ICON          VARCHAR2(32),
 SHORTCUT      VARCHAR2(16),
 NOTES         VARCHAR2(100),
 ID_WORKER     NUMBER,
 ID_FILE       NUMBER
);
create table ADM_STRUCTURE_LINK
(
 ID_ADM_STRUCTURE_LINK NUMBER(12) not null,
 ID_OBJECT             NUMBER(12),
 ID_PERMISSION         NUMBER(12),
 ID_DBOBJECT           NUMBER(12),
 ID_USER               NUMBER(12),
 ID_ROLE               NUMBER(12),
 ID_ROLE_INCLUDED      NUMBER(12),
 ID_FILE               NUMBER(12),
 ID_SEPARATOR          NUMBER(12),
 FLAG_REVOKE           NUMBER(1) default 0 not null
);

Структура почти вся. Есть дополнительные таблицы для хранения различных файлов, работников (чтобы юзера привязать к ФИО), но это уже к безопасности очень косвенно относится. Только тебе эта структура толком не поможет. Ну не сможешь ты на парадоксе (или кажется ты уже на какую-то "нормальную" СУБД согласился?) раскрутить нормально дерево и реализовать такие сложные запросы. А кода у меня процедур, вьюх и пакетов для обработки такой структуры не на одну страницу будет. И трудозатраты на структуру от силы час, а на отлаженный код уже даже не днями считать надо.



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

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

Наверх




Память: 0.58 MB
Время: 0.046 c
2-1159097390
Серый
2006-09-24 15:29
2006.10.08
MainMenu


2-1158315648
Genn
2006-09-15 14:20
2006.10.08
TMaskEdit


6-1147672723
Pop3
2006-05-15 09:58
2006.10.08
Sender.Name:= Кузнецов не пашет


5-1140528799
SMAC
2006-02-21 16:33
2006.10.08
Добавление компонент


10-1124092462
DimMih
2005-08-15 11:54
2006.10.08
Вставка изображения в AutoCad





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский