|
|
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
2 Winni-Pooh Трехзвенка это очень обширная задача. Сколько реализаций столько идей. Сформулируй вопрос ... можно будет обсудить. На своей практике нужда в трехзвенке у меня возникала только в случае доступа удаленных офисов к общей БД через web. На самом деле она решает часть сложных проблем за счет увеличения сложности и стоимости разработки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 11:46:25 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
to Igor Elyas Winni-Pooh этот вопрос продолжил в теме: Multi-Tier, или трехзвенка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 11:58:31 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
авторНасколько я понял, сама прога должна быть написана с обращением к объекту ядра… Что мне писать новую прогу? Да, нужен еще интерфейс для администрирования доступа. авторДа и не бесплатно это… Я не предлагаю покупать :))) Сама идея - вот суть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 12:55:04 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Dik76 Сама идея - вот суть. Идея - это хорошо... а у тебя как реализовано? Или тока идеи? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.06.2004, 13:20:11 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
>Winni-Pooh представляю :) я такую систему внедрял. Всё как вы говорите: трёхзвенка, вся бизнес-логика, вся безопасность - на сервере БД (MSSQL). Приведенный мной вариант -действительно для достаточно простой системы, где функциональность АРМ задаётся указанием доступных для использования функций и прав. Но кому интересно - могу описать подробнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 10:36:33 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
ololа у тебя как реализовано? У меня реализованно упрощенная версия ядра (разграничение доступа на уровне динамически формируемого меню). Предоставление доступа к пунктам реализуется через утилиту администратора. Сейчас работаю как раз над разграничением на уровне операций. Попутно хочу описав объекты системы, хотя бы частично автоматизировать написание клиента. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 11:17:00 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Dik76 ...упрощенная версия ядра... Ты динамически создаеш ФОРМЫ с меню или только меню на готовых формах? Если только меню...... А если формы, то на них кроме меню бывает целая куча различных элементов ввода... Хотя конечно можно для каждой роли создать свою форму... Но там и без ролей хватает проблем, например с передачей параметров выбора между динамическими формами... А на счет модуля Администрирования... дык я на него и потратил 2 дня... Просто создать таблицы и занести туда права обычным SQL Explorer можно и за час... (немного загнул... смотря сколько форм и прав). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 11:52:01 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
авторА если формы, то на них кроме меню бывает целая куча различных элементов ввода... Вот об этом и речь. Я приследую цель описав объекты системы (ПР: объект - сотрудник, свойства - ФИО, ДР...), управлять доступом уже до свойств объекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 12:35:23 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Dik76 ...объекты системы... Насколько я понял твои объекты имеют мало что общего с тем куда ты меня посылал... вот там точно крыша съедит... Можешь сам посмотреть в разделе 'Проектирование' тема 'Люди свершилось...' Твой объект 'сотрудник' привязан к полю таблицы или элементу ввода на форме с указаниеп его типа? (Edit, ListBox...) И вообще под какую задачу пишешь? Или просто заготовка на будущее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 13:05:25 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Насколько я понял твои объекты имеют мало что общего с тем куда ты меня посылал... отсылал сюда (пост можно сказать описывает мою цель, ядро безопасности лишь модуль), потому что вещь интересная. я реализую по своему. Твой объект \'сотрудник\' привязан к полю таблицы или элементу ввода на форме с указаниеп его типа? (Edit, ListBox...) он привязан к сущности (таблице), а поля являются атрибутами. Для атрибутов указывается их визуальное представление (Edit, ...). И вообще под какую задачу пишешь? Или просто заготовка на будущее? Делаю не зависимую систему, т.е. это промежуточный слой м/у реляционной БД (на oracle) и клиентом (Delphi). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 16:49:57 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Всем привет! Когда-то я написал IBXUserProfile но вскоре понял, что это ошибка. Невозможно сделать нечто универсальное для настройки всего "визуального" на все случаи жизни. По-моему, более правильный вариант использовать простые пользовательские переменные (неважно где их хранить) наподобие ini - файла и по их текущему значению настраивать интерфейс и логику программы - это более гибко. Я это использую в достаточно большой системе (10 филиалов, разбросанных по городу в радиусе 50 км) По этому поводу, я написал компонент IBXUserProfiles 2.0, не очень удачный, но у меня (в моей компании) работает без проблем. Кому интересно, заглядывайте на http://www.sinn.ru/~mapnn С уважением, Игорь Ильинский ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 19:59:08 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
mapnnВсем привет! Когда-то я написал IBXUserProfile но вскоре понял, что это ошибка. По этому поводу, я написал компонент IBXUserProfiles 2.0, не очень удачный, но у меня (в моей компании) работает без проблем. при всем уважении :-) напоминает историю развития технологий майкрософт. "но потом другая группа разработчиков увидела фатальный недостаток в com - его придумали не они!" (с) вольный :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 20:05:33 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Привет Alex "Всегда хочется <как лучше>, а получается <как всегда>" (c) Черномырдин С другой стороны, мне не стыдно, так-как не ошибается тот кто ничего не делает, а тот, кто хоть что-то пытается, того заочно можно простить .... mapnn :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.06.2004, 20:18:03 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
Dik76 ...ядро безопасности лишь модуль... …указывается их визуальное представление... Вот тут ты батенька ошибаешься. Это СооовСееем разные вещи… Описание объектов как классов и свойств – другая задача, хотя и там есть своя система безопасности… Зри внимательней… там две части: свойства связанные с данными (таблицами, их взаимодействием и защитой) и свойства интерфейса проги… (хотя тоже с правами) Не нужно их скрещивать (не Мичурин ведь)… Ничего хорошего не выйдет… А вот визуальные свойства и права их действия для пользователя являются едиными, поскольку относятся к общим объектам. Например: TEdit.Enabled, Visible, ReadOnly и OnClik… как в прочем и TForm.Height, Width и др. Dik76 Делаю не зависимую систему… Нужно быть немного реалистичней, если конечно хош создать нечто, чем заинтересуются другие… Если сделать модуль (лучше в виде компоненты) который позволит с минимальной доработкой проги ее разрулить… т.е. автоматизирует заполнение таблиц свойств допуска… Например: поможет из Application выдернуть все формы, из Form все объекты, а из Object его свойства, методы и проставить им соответствующие права… Тоды любой смогёт это быстро сделать и возможно даже спасибо скажут… Лично у меня сейчас на это времени нет… Если интересует могу описать что получилось по подробнее... mapnn …использовать простые пользовательские переменные (неважно где их хранить) наподобие ini – файла… Вот тут я с тобой не согласен… Очень даже важно… Какой геморрой творится в ini… особенно если этих настоек много… Для этого есть реестр, но… Если хранить их на сервере – то получишь независимость от компа… Пользователь получит свои настройки на любой машине… И рулить ими легче в одном месте… А вот считанные данные действительно можно хранить в простом массиве строк, например TStringList. Я считываю настройки для формы только один раз (при ее создании), а потом уже (при ее выводе) устанавливаю свойства объектов из полученного массива. При этом все параметры получаю одним SELECT из ХП без особого увеличения нагрузки и времени выполнения… И при смене пользователя, настройки для форм - те же (не нужно их перечитывать), просто при ее выводе свойства сменятся согласно новым правам… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2004, 07:35:23 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
ololОписание объектов как классов и свойств – другая задача, хотя и там есть своя система безопасности… .. Не нужно их скрещивать (не Мичурин ведь)… Ничего хорошего не выйдет… Я попробую :))), потом расскажу что вышло. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2004, 09:11:16 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
olol Вот тут я с тобой не согласен… Очень даже важно… Какой геморрой творится в ini… особенно если этих настоек много… Для этого есть реестр, но… Если хранить их на сервере – то получишь независимость от компа… Пользователь получит свои настройки на любой машине… И рулить ими легче в одном месте… Я как-раз имел ввиду хранение на сервере, например в виде некоторой структуры в блобе (доп. плюс - возможность шифрования) Структура считывается каждый раз после коннекта для конкретного юзера, укладывается в памяти (TUserProfile) и лежит до следующего коннекта/переконнекта. При необходимости изменить логику программы или настроить интерфейс, в нужное время в нужном месте просто читаешь из этой структуры нужную переменную и по её значению делаешь "нечто", типа X = UserProfile.ReadInteger('X',0); или Edit1.Enabled = UserProfile.ReadBoolean('Edit_Enabled',False); Или изменить логику: if UserProfile.ReadBoolean(Val1,False) then // нечто else // нечто иное ... ну и т.д. и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2004, 12:46:51 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
olol Вот тут я с тобой не согласен… Очень даже важно… Какой геморрой творится в ini… особенно если этих настоек много… Для этого есть реестр, но… Если хранить их на сервере – то получишь независимость от компа… Пользователь получит свои настройки на любой машине… И рулить ими легче в одном месте… Я как-раз имел ввиду хранение на сервере, например в виде некоторой структуры в блобе (доп. плюс - возможность шифрования) Структура считывается каждый раз после коннекта для конкретного юзера, укладывается в памяти (TUserProfile) и лежит до следующего коннекта/переконнекта. При необходимости изменить логику программы или настроить интерфейс, в нужное время в нужном месте просто читаешь из этой структуры нужную переменную и по её значению делаешь "нечто", типа X = UserProfile.ReadInteger('X',0); или Edit1.Enabled = UserProfile.ReadBoolean('Edit_Enabled',False); Или изменить логику: if UserProfile.ReadBoolean(Val1,False) then // нечто else // нечто иное ... ну и т.д. и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2004, 12:52:34 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
в питоне есть возможность паковать объекты в строку (модуль pickle) очень удобно хранить на стороне сервера различные пользовательские настройки, позволяет легко расширить справочник без изменения структуры таблицы в Делфи такого нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2004, 13:06:40 |
|
||
|
Распределение прав доступа в прогах...
|
|||
|---|---|---|---|
|
#18+
mapnn ...в виде некоторой структуры в блобе (доп. плюс - возможность шифрования)... Большой привет! Я не считаю себя БОЛЬШИМ программистом, да и на форуме недавно… olol – это от имени (Злобин Олег)… Сервер не дал назваться Oleg – типа такой уже есть и просто ol нельзя меньше четырех… Игорь, ну не нравиться мне работа с BLOB... некий кусок непонятно чего... Это хорошо только если там данные хранятся простым списком... А шифровать можно и в обычном CHAR (главное не перестараться)... Ведь нет ни какой разницы, если ты создаешь всего ОДНУ служебную табличку или ДЕСЯТЬ… Я не против твоей компоненты, но смотри, что получается… Все данные прекрасно бьются на связанные таблицы (формы, объекты, права…) и не нужно придумывать параметры типа Form1Edit1Enabled… А потом программно присваивать соответствующей компоненте нужное свойство… Я потому так быстро и переделал прогу под это управление, что каждой форме задал всего два события: // В форме… void __fastcall TForm1::FormCreate(TObject *Sender) { SLObj = new TStringList(); SLObj->Sort(); DMS->GetFrmAccess(SLObj, "Form1"); }//--------------------------------------------------------------------------- void __fastcall TForm1::FormShow(TObject *Sender) { DM->SetFrmAccess(SLObj, Form1); SelectFirst(); }//--------------------------------------------------------------------------- // В дата модуле… void __fastcall TDM::GetFrmAccess(TStringList* SL, AnsiString ShFrm) { AnsiString s, ShObj,ShAcs; s = "SELECT ShObj, ShAcs FROM psSFrmShFrm(:ShFrm) ORDER BY IdObj"; quSQL->SQL->Clear(); quSQL->SQL->Add(s); quSQL->Params->ParamValues["IdExe"] = IdExe; quSQL->Params->ParamValues["ShFrm"] = ShFrm; quSQL->Open(); SL->Clear(); TField *FLShObj = quSQL->FieldByName("ShObj"); TField *FLShAcs = quSQL->FieldByName("ShAcs"); while (!quSQL->Eof) { ShObj = FLShObj->AsString; s = ""; while (FLShObj->AsString == ShObj && !quSQL->Eof) { ShAcs = FLShAcs->AsString; if (s.IsEmpty()) s = ShObj.Trim() + "="; else s += ";"; s += ShAcs.Trim(); quSQL->Next();} SL->Add(s);} quSQL->Close(); }//--------------------------------------------------------------------------- void __fastcall TDM::SetFrmAccess(TStringList* SL, TForm* FM) { AnsiString s,ShObj,ShAcs; TComponent *CP; TControl *CT; TMenuItem *MI; bool b; for (int i=0; i < SL->Count; i++) { ShObj = SL->Names ; ShAcs = SL->Strings; ShAcs = LStrGetR(ShAcs, "="); CP = FM->FindComponent(ShObj); if (CP) if (CP->InheritsFrom(__classid(TControl))) { CT = (TControl*)CP; CT->Enabled = DMS->CheckAccess(ShAcs);} else if (CP->InheritsFrom(__classid(TMenuItem))) { MI = (TMenuItem*)CP; MI->Enabled = DMS->CheckAccess(ShAcs);}} }//--------------------------------------------------------------------------- Извиняй что на C++Builder… Самый простой пример для установки всего одного свойства ‘Enabled’… Для ЛЮБОЙ компоненты из TControl и TMenuItem… Это конечно далеко не идеал, максимально упростил для понимания… И работает только в случае, если каждый объект имеет одно право допуска… (если есть несколько перекрывающихся, то нужен дополнительный цикл для суммы прав) Процедура ‘psSFrmShFrm’ получает список прав, а CheckAccess – просто проверяет наличие этого права у пользователя… Ведь и заполнять эти таблицы можно автоматически, как я говорил раньше… Если установить этот модуль в прогу, запустить ее и вызвать настройку – она сама переберет все что найдет и заполнит их… (кроме прав, конечно) А вот с базой она должна работать все-таки через ADO… (IB конечно неплохой, но не единственный…) К тому же некоторые вещи все равно ODBC требуют, например: Crystal Reports или у нас CAD/CAM Adem… ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2004, 14:45:10 |
|
||
|
|

start [/forum/search_topic.php?author=Query&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
175ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 681ms |
| total: | 1000ms |

| 0 / 0 |
