|
|
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
Добрый день, уважаемые. Уже не первый проект появляется необходимость реализовать систему разграничения прав доступа к функциям (объектам, модулям) программы. Приграммы типа клиент-сервер СУБД. Интересует разграничение прав на стороне приложения, а не сервера БД. Поделитесь опытом, как лучше реализовать текое разграничение? Что выбрать в качестве элемента разграничения? Как обеспечить доступ к таким элементам? Ну и все такое. Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 11:05:40 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
Это наивно. Надо в любом случае ограничить учётку в правах в самой БД. В противном случае вы получите не безопасность а иллюзию безопасности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 11:52:29 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
На уровне сервера учетные записи однозначно будут. И пользователи там будут. И разграничение в доступе к данным будет. Это не вместО, а скорее вместЕ. Т.е. вместе с разграничением по данным необходимо разграничение по возможностям (функциям) программы. Скажем один пользователь может нажать на кнопку, другой - нет. Как лучше такой подход организовать архитектурно (без динамического создания объектов)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 12:01:23 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
Roman39, обычно оглашают инструменты с помощью которых собираются достичь желаемого эффекта... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 12:11:09 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
Инструменты: C# (WPF\WinForms). Интересует именно архитектура вызова методов, чтобы учесть разграничение по функциям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 12:36:33 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
Roman39, но это очень глубокая безопасность, ябы даже сказал, это уровень разрганичений для разработчика на вызов методов. Вам-же надо просто отобразить на экране пользователя список тех режимов, форм, отчётов, который соответствует авторизации пользователя. GUI вам надо будет ограничить в любом случае, иначе получится анекдот - "у меня есть посылка только я вам её не отдам и т.д". Т.е. вам придётся делать и секюрити методов и GUI. И зачем вам двойная работа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 13:00:53 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
maytonRoman39, ... Вам-же надо просто отобразить на экране пользователя список тех режимов, форм, отчётов, который соответствует авторизации пользователя. ... Вообщем да. С методами это я неправильно выразился. Так вот как организовать работу с таким "списком"? Из чего будет состоять такой список? Вот например с кнопкой. Как она будет отражена в таком списке? Т.е. например в конструкторе формы вызвать "что то" что вернет список "чего то", на основе этого списка, например, сделать кнопку неактивной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 13:15:58 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
Грант "на кнопку" никогда не выдаётся. Я сколько работаю - не встречал подобной архитектуры. А вот на формочку - да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 13:33:19 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
mayton, у меня, например, выдается :) примерно так: Код: plaintext 1. 2. хотя это редкость и, в некотором роде, костыль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 14:09:12 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
to alex_k: У Вас кнопка создается во время выполнения. Я хотел бы этого избежать. Если не секрет, как у Вас проверяется наличие прав по передаваемой строке? mayton Вот в этом и вопрос: на что выдавать гранты? Под кнопкой скрывается некоторая функция, которая либо доступна либо нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 14:28:26 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
maytonГрант "на кнопку" никогда не выдаётся. Я сколько работаю - не встречал подобной архитектуры. А вот на формочку - да. Ну а например кнопка - "показать оклад". Какому-то пользователю можно на форме нажимать эту кноку, а кому-то нильзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 14:40:11 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
Roman39 Вот в этом и вопрос: на что выдавать гранты? Гранты лучше выдавать на функции, а не на кнопку. Потому как одна функция может выполнятся с разных мест: с кнопок, пунктов меню и прочее. Программа смотрит - может ли кнопка выполнить функцию - нет, то disable. Доступы на функции хранятся в базе в табличном виде. При загрузке формы происходить анализ и установка доступности элементов для данного пользователя (в самой форме). Для каждой формы нужно писать код, который будет читать данные по доступу для данного ползователя и настраивать форму. Для работы с администрированием доступа нужно будет написать спец. софт. Ну для простоты администрирования можно еще создать группы доступа. Примерно в таком ключе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 14:56:59 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV ... Доступы на функции хранятся в базе в табличном виде. При загрузке формы происходить анализ и установка доступности элементов для данного пользователя (в самой форме). Для каждой формы нужно писать код, который будет читать данные по доступу для данного ползователя и настраивать форму. Для работы с администрированием доступа нужно будет написать спец. софт. Ну для простоты администрирования можно еще создать группы доступа. Примерно в таком ключе. В принципе я тоже пришел к такому варианту. Небольшая проблема такого варианта в том, что все разграничиваемые функции должны быть заранее известны (чтобы описать их в таблице). И трудно будет ввести новые функции, которые надо разграничить (которые ранее предоставлялись всем). Но я наверное слишком все усложняю... Может кто то делает по другому? В любом случае всем откликнувшимя спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 15:23:29 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
Roman39 В принципе я тоже пришел к такому варианту. Небольшая проблема такого варианта в том, что все разграничиваемые функции должны быть заранее известны (чтобы описать их в таблице). На новой или старой форме нужно ограничить доступ функции. Делаем следующее: 1) Добавляется запись в таблицу объектов доступа. 2) Добавляются записи к группам доступа - кому можно запускать. 3) Добавляем код на форму где анализируется текущий доступ. 1 и 2 пункты делаются самодельным администратором, чтоб удобнее было. Можно еще почитать про "Механизмы безопасности в .NET", раз .NET используется. А в общем случае, я думаю так и решается эта проблема. У меня одна программа так работает, я, в принципе, доволен. У меня даже закладки скрываются на tab'ах в зависимости от прав доступа для конкретного пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 15:49:05 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
Спасибо за полезную информацию... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 16:07:45 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVmaytonГрант "на кнопку" никогда не выдаётся. Я сколько работаю - не встречал подобной архитектуры. А вот на формочку - да. Ну а например кнопка - "показать оклад". Какому-то пользователю можно на форме нажимать эту кноку, а кому-то нильзя. Согласен, но в более осмысленном проектировании нельзя вообще показывать сам факт наличия кнопки (вспоминаем Печкина с посылкой), ведь у пользователя могут возникнуть лишние вопросы. Это секюрно и избавляет вас от лишних дискуссий с пользователем по поводу прав и привилегий. Я-бы постарался сделать две формы: одну с просмотром персонала, и другую с просмотром персонала и окладов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 16:12:05 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV Гранты лучше выдавать на функции, а не на кнопку. Потому как одна функция может выполнятся с разных мест: с кнопок, пунктов меню и прочее. Программа смотрит - может ли кнопка выполнить функцию - нет, то disable. Доступы на функции хранятся в базе в табличном виде. Я представил себе сколько кода надо написать чтобы реализовать все эти переходники и ужаснулся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 16:14:52 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
mayton ... Я-бы постарался сделать две формы: одну с просмотром персонала, и другую с просмотром персонала и окладов. В таком случае придется "плодить" много "родственных " форм. Форма просмотра персонала, Форма просмотра пресонала и окладов, Форма просмотра персонала и обрабатываемых ими заказов, Форма просмотра персонала, обрабатываемых ими заказов и окладов и т.д. И в результате получится тот же перебор, который Вас "ужаснул". Всегда хочется уменьшить прямой перебор чего либо в программе... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 16:22:38 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
mayton Я-бы постарался сделать две формы: одну с просмотром персонала, и другую с просмотром персонала и окладов. Кстати, да, это второй подход: Делаются варианты форм с различным доступом. И просто указывается доступ на форму - есть он или нет. Есть некоторые трудности, правда, в плане сопровождения - придется сопровождать синхронно две формы с примерно одинаковой математикой, что не очень удобно. Ну и это годно, если небольшое количество объектов администрируется. У меня на одной форме администрируются - 6 закладок (скрыта/открыта) и 7 гридсеток (только чтение/ редактирование). Пришлось сделать разраничение доступа. Тем более, что это не сложно оказалось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 16:27:25 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
Roman39 В таком случае придется "плодить" много "родственных " форм. Форма просмотра персонала, Форма просмотра пресонала и окладов, Форма просмотра персонала и обрабатываемых ими заказов, Форма просмотра персонала, обрабатываемых ими заказов и окладов и т.д. И в результате получится тот же перебор, который Вас "ужаснул". Всегда хочется уменьшить прямой перебор чего либо в программе... Верно. Но вы ведь не сказали, как формируете дизайн форм. Вообще-то здесь вопрос открытый. И самый верный ответ даст практика. Если у вас есть дизайнер, который рисует формочки - это будет один подход (со своими недостатками и преимуществами). Если у вас формы генерируются "на ходу" излекая информацию из БД - это другой подход. Оба подхода одинаково жизнеспособны. Но мы сейчас обсуждаем вопросы в вакууме. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 16:31:28 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
mayton Я представил себе сколько кода надо написать чтобы реализовать все эти переходники и ужаснулся. Мало. У меня не очень большой проект. Там один класс. Он строит меню по доступам + у него есть функции, которыми можно определить доступ. Писано, правда на дельфи. Вот пример установка прав доступа на гридсетку: Код: plaintext 1. 2. 3. 4. В общем, при желании можно написать удобную систему, главное хорошо продумать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 16:33:00 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SV, В принципе нормально. Я не вкурсе... (давно-давно писал на .Net.) но лучше-бы сделать не read-only а invisible или вообще не конструировать grid. Это та самая "посылка Печкина" которая не отдаётся пользователю. Но мне вообще подобный способ или метод разработки не нравится тем, что информация распылена и децентрализована по базе и по клиенту и по дизайну форм клиента. Для такого "тройственного" хранения сложно делать обратный инжинеринг и сложно вносить согласнованные измененения. Если у вас проект маленький то всё нормально. Если код растёт и разработчиков много - то начинается настоящий hell! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 16:44:05 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
А LDAP не рассматриваете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 19:47:25 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
Довольно часто пользую ограничения на кнопки, эдитбоксы и т.д. Для этого имею набор своих контролов, напр. Код: plaintext 1. 2. 3. 4. Если она не пустая, а группы данного пользователя в ней нет, тупо делаю контрол невидимым. Проблем пока не было. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2010, 23:48:58 |
|
||
|
Система разграничения прав доступа
|
|||
|---|---|---|---|
|
#18+
В принципе весь вопрос сводится к централизованному разграничению прав доступа, что бы максимально облегчить процесс сопровождения программы. Не всегда удается предусмотреть все возможные объекты к которым следует ограничить доступ на этапе проектирования ПО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2010, 10:23:04 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=36836468&tid=1343469]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
194ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 528ms |

| 0 / 0 |
