Текущий архив: 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