| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
Альтернативный механизм использования ролей
В замечательной книге "Мир Interbase" есть шикарная фаза ": начинающие разработчики часто считают права на объекты "излишеством" и стараются придумать собственные системы безопасности, не утруждая себя изучением уже существующей". Согласен с данной точкой зрения целиком и полностью (в том числе сам проходил через этот этап - документацию читать нам лень, а изучать системные таблицы - вдвойне) и хочу показать, что даже стандартные средства если они по какой-то причине вас не удовлетворяют, можно использовать по-новому, причем без создания дополнительных структур данных. Сразу вводим соглашение, что привилегии на объекты БД даются не пользователям, а ролям, ибо пользователи приходят и уходят, а выполняемые ими функции остаются. Стандартный подход использования ролей заключается в том, что пользователь при подключении к БД указывает конкретную роль (из тех, что ему даны администратором) и получает привилегии данной роли. Рассмотрим пример. Предположим, что у гипотетической системы бухгалтерского учета есть 3 группы пользователей - ролей: "главбух", "кассир" и "расчетчик зарплаты". Должностные обязанности сотрудников определяют следующий доступ к БД программы:
Пример очень простой, но отражает суть: для каждой роли мы прописываем доступ на чтение справочника "План_Счетов". А поскольку, как говаривал один из моих преподавателей, "жизнь шире наших схем", в реальной системе наберется далеко не одна общая привилегия, которую нужно давать доброму десятку ролей. Фатального конечно в этом ничего нет, но некрасиво как-то все роли прописывать с нуля - логичнее было бы пользователю сразу иметь привилегии всех своих ролей, а сами роли строить по принципу "базовая роль" - "специфические привилегии". Кроме того, механизм ролей я предлагаю использовать еще и для идентификации пользователей приложения (напомню, что в Interbase список пользователей ведется на уровне сервера) дабы в своей БД не держать информацию о зарегистрированных пользователях. Создадим роль "Пользователь", наличие которой будет определять, что пользователь сервера Interbase - зарегистрированный пользователь приложения (заодно ее можно дать права на чтение общих справочников). Впрочем, роли-то как раз определяются на уровне БД, и возможно, можно обойтись проверкой на существование хотя бы одной роли у пользователя. Плюсы данной схемы: пользователю не надо указывать роль при подключении (ему вообще не надо будет знать о существовании ролей), он всегда обладает всеми своими правами в системе; администратору - создавать роли, различающиеся двумя привилегиями или "супер-роли" (например, роль "Главбух" как совокупность прав всех сотрудников бухгалтерии + права администрирования плана счетов и т.п.) - достаточно создать базовый набор ролей, а специфические будут иметь только те привилегии, которые расширяют базовую роль. Впрочем, роли можно настроить и по-старому (прописывать доступ ко всем объектам) - тут появляется гибкость. Минусы: реализация невозможна при использовании прямого доступа к таблицам - поскольку пользователь не указывает роль, бессмысленно ролям давать привилегии на таблицы. Доступ к данным будем осуществлять через представления (на чтение) и хранимые процедуры (вставка, обновление, удаление). Доступ на чтение конечно тоже можно осуществлять через хранимые процедуры, но при построении своих запросов для нестандартных выборок данных или при разработке отчетов у пользователей (да и администратора) вашего приложения могут возникнуть проблемы - непривычно вместо соединений указывать параметры для процедуры. Права на запуск процедур и просмотр представлений дадим всем пользователям (PUBLIC), а внутри процедур (представлений) будем проверять наличие у пользователя необходимых ролей, обращаясь к системным таблицам RDB$USER_PRIVILEGES и RDB$ROLES. Тогда представления будут существовать для всех пользователей сервера, но данные из них увидят только пользователи, которым даны роли, имеющие привилегию SELECT - для прочих представления не будут содержать данных. В процедурах можно при проверке прав пользователя возбуждать исключение, если не найдена ни одна роль, имеющая права на запуск процедуры или просто выходить.
Для обеспечения этой функциональности нам понадобятся: во-первых, список ролей текущего пользователя и во-вторых функция, которая бы определяла у пользователя наличие конкретной роли. Список ролей удобно получить опять же в виде представления: Второй запрос нужен для того, чтобы SYSDBA и владельцу БД (в данном примере это пользователь "DBOWNER") от имени которых в некоторых случаях необходимо работать администратору БД были доступны все роли, а значит, запуск всех процедур и просмотр данных во всех представлениях. Функцию реализуем естественно в виде хранимой процедуры:
Тогда в нашем примере скрипт на создания представления на справочник "План_Счетов" может выглядеть следующим образом:
А новое определение ролей и привилегий будет выглядеть так: Соответственно пользователям назначается не одна роль, а две: ("Бухгалтер" + "Расчетчик", "Бухгалтер" + "Главбух"). Таким образом, мы построили систему безопасности, основанную на домене ролей пользователя, используя при этом штатный механизм ролей, сохранив стандартное назначение привилегий и не вводя дополнительных таблиц для хранения данных о пользователях. Рубрика: InterBase
HTML 5: пять вещей вызывающих особый интер....
HTML 5 — это грядущее обновление гипертекстового языка разметки, основного способа создания контента для размещения его во всемирной паутине. Разработка HTML остановилась в 1999 году, на версии HTML 4.01 и с тех пор web-содержимое изменилось так, что текущие спецификации HTML перестали соответствовать сегодняшним требованиям. HTML 5 нацелен на то, чтобы увеличить функциональную совместимость HTML и соответствовать растущим требованиям разнообразного и смешанного web-контента. HTML 5 так же нацелен на устранение недостатков четвертой версии. В этой статье мы взглянем на 5 новых интересных вещей в HTML 5.
Подробнее... |
Рубрика: Html
| Добавлено: 22.12.2008
asp.net: ListView с разных сторон.
Элемент управления ListView был представлен в .Net Framework 3.5 как замена устаревшему GridView. Новый элемент имеет более расширенный функционал, чем его предшественник, но в тоже время лишен некоторых внутренних механизмов, что впрочем целиком следствие из расширенной универсальности ListView. Среди отличий ListView и GridView можно назвать и гибкую настройку разметки, что позволяет выводить данные не только в табличном виде, но и вообще в любом каком пожелает программист. Благодаря шаблонам ItemTemplate, EditItemTemplate, InsertItemTeplate можно настроить внешний вид при любом из состояний ListView: редактировании или выборе элемента.
Подробнее... |
Рубрика: .NET компоненты
| Добавлено: 22.12.2008
Создание кросс-таб отчета в Stimulsoft Rep....
Компания Стимулсофт предоставляет для разработчиков мощный набор инструментов для создания отчетов для Microsoft Visual Studio .Net 2005 и 2008; эти инструменты доступны как для Windows Forms, так и для Web Forms. Это генератор отчетов Stimulsoft Reports.Net. Генератор отчетов Stimulsoft Reports.Net имеет ряд особенностей: простая работа с дизайнером отчетов, полная поддержка экспорта в PDF, Word, Excel и многие другие форматы. Crystal Report и Microsoft Reporting Service – очень хорошие программные продукты для повседневной работы, но, если Вам необходимо создать отчеты с поддержкой кросс-табов, drill down, Ajax, штрих-кодов и возможностью подключения одновременно более одного источника данных, то Stimulsoft Reports.Net поможет Вам сэкономить массу времени. Также, данный генератор отчетов позволяет пользователям создавать свои собственные отчеты любой сложности. И все эти особенности делают Stimulsoft Reports.Net хорошим выбором в сфере программных продуктов для Business Intelligence.
Подробнее... |
Рубрика: .NET компоненты
| Добавлено: 22.12.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|