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

start [/forum/topic.php?all=1&fid=16&tid=1343469]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
187ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 248ms |
| total: | 558ms |

| 0 / 0 |
