2 / 2 / 2
Регистрация: 30.04.2011
Сообщений: 108
1

Разграничение прав на уровне приложения

05.08.2013, 14:47. Показов 2921. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!

Стоит задача - разграничить права пользователей (по группам) на уровне приложения Delphi.
Решаю следующим образом:
1. В БД (Firebird 2.0) создана таблица:
SQL
1
2
3
4
5
6
7
8
CREATE TABLE PERMISSIONS (
    ID         D_TPKEY /* D_TPKEY = INTEGER NOT NULL */,
    ID_GROUP   D_TFKEY /* Группа */,
    FORM       D_CHAR50 /* Форма */,
    COMPONENT  D_CHAR50 /* Компонент */,
    PROPERTY   D_CHAR30 /* Свойство */,
    PRO_VALUE  D_CHAR30 /* Значение */
);
2. При запуске приложения запускается форма авторизации, при успешной авторизации в главную форму передается id группы пользователя.

Необходимо перебрать все компоненты в форме и при совпадении имени компонента в форме и таблице присвоить свойству каждого компонента (из таблицы PERMISSIONS) значение (из PERMISSIONS).

Компоненты формы перебираю следующим образом:
Delphi
1
2
3
4
5
6
7
8
9
procedure Tfrm_main.btn_testClick(Sender: TObject);
var
  i: integer;
  s: string;
  form_name: string;
begin
   for i := 0 to ComponentCount-1 do
       s := s + Components[i].Name + #13;     
end;
Как быть дальше?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.08.2013, 14:47
Ответы с готовыми решениями:

Разграничение прав в delphi
Как в делви сделать разграничение прав. Что бы было 2 пользователя 1 админ 2 USER У...

Как делается разграничение прав?
Объясните пожалуйста если в системе работают 2 пользователя и у каждого из них д.б. свои функции и...

Разграничение прав доступа пользователей
Добрый день, есть база в Аксесе где есть таблица Авторизация вней 2 пальзователя 1 Администратор 2...

Настроить разграничение прав для БД
Здравствуйте, помогите настроить разграничение прав. Я знаю что это возможно но, не знаю как....

6
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.08.2013, 15:05 2
Если свойство не опубликовано, то никак.
0
36 / 36 / 7
Регистрация: 15.01.2013
Сообщений: 161
05.08.2013, 15:27 3
PunK_HS,не до конца понял, что требуется сделать -
но для записи вспомогательной числовой информации
почти у всех Delphi-компонентов есть свойство Tag.
0
2 / 2 / 2
Регистрация: 30.04.2011
Сообщений: 108
05.08.2013, 15:42  [ТС] 4
Цитата Сообщение от ArtProud Посмотреть сообщение
PunK_HS,не до конца понял, что требуется сделать -
но для записи вспомогательной числовой информации
почти у всех Delphi-компонентов есть свойство Tag.
В таблице PERMISSIONS описаны все компоненты, для которых должен проверяться доступ

Пример:
имя_формы='Form_registration', имя_компонента='Button_do_something', свойство='Enabled', значение='False', id_группы=№.

Необходимо каждый раз при создании формы (путем передачи имени формы, списка доступных компонентов и номера группы) проверять значение свойства в таблице PERMISSIONS.
Например, если chk_box.Enabled = : True, то для этой группы этот компонент является доступным и так далее.
0
36 / 36 / 7
Регистрация: 15.01.2013
Сообщений: 161
05.08.2013, 17:29 5
PunK_HS , похоже, как уже говорил mss что никак.
Как обходной вариант, если всего лишь несколько свойств у компонетов нужно менять,то можно
написать функцию, например как-то так:

Delphi
1
2
3
4
5
6
7
8
9
procedure SetProperty(aComponent:TComponent; aProperty,aPropertyValue: string);
begin
  If aProperty='Enabled' then
   aComponent.Enabled := (aPropertyValue = 'true')
 Else
   If aProperty='Caption' then
     aComponent.Caption:= aPropertyValue;
  //.... продолжение
end;
Только в этом случае по-моему еще нужно компоненты aComponent
приводить к какому-то определенному типу aComponent as TButton например
0
2 / 2 / 2
Регистрация: 30.04.2011
Сообщений: 108
05.08.2013, 20:10  [ТС] 6
Цитата Сообщение от mss Посмотреть сообщение
Если свойство не опубликовано, то никак.
Тогда подскажите, в какую сторону копать? Как обычно реализуется разграничение?
0
2664 / 2270 / 279
Регистрация: 24.12.2010
Сообщений: 13,723
05.08.2013, 20:59 7
Цитата Сообщение от PunK_HS Посмотреть сообщение
Как обычно реализуется разграничение?
Никаких "обычных" правил не существует - каждый разработчик городит свой огород.
Но конкретно в твоем огороде следует отчетливо понимать, что для обращения к свойству дельфийского объекта по известному имени свойства необходимо чтобы это свойство было объявлено как published - тогда оно будет зарегистрировано в RTTI-таблице и его чтение/запись станет возможна даже без знания фактического класса этого объекта.

http://docs.embarcadero.com/pr... riant.html
1
05.08.2013, 20:59
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2013, 20:59
Помогаю со студенческими работами здесь

Разграничение прав Delphi БД Access
вот я добавил столбец role(роль) в таблицу "table_users" как сделать чтобы при входе он проверял...

Разграничение прав, админ и юзер
Есть форма для регистрации, там 2 пользователя. Суть в том чтобы при авторизации администратора...

Сделать разграничение прав доступа к таблицам и кнопкам в проекте Delphi через данные из Access
Нужно сделать авторизацию в делфи, так что бы данные брались из таблиц MS Access, и не просто...

Разграничение прав доступа.
есть БД в SQL Server 2000 и приложение в Delphi. при запуске приложения появляется форма где...

Разграничение прав
У меня такой вопрос. Имеется две конфигурации 1С. Версия учебная 8.3. Одна конфигурация для сервера...

разграничение прав
Доброго времени По ночам в доменную сеть на терминал (он же контроллер) заходит 1С-ник и он не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru