Модераторы: Poseidon, Snowy, bems, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ограничение прав доступа в программе, нужен принцип 
:(
    Опции темы
Gorets
Дата 23.3.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



Пишу бухгалтерскую программу. Пользователей будет много и каждому нужно дать доступ только к определенным частям програмы. Я думаю сделать это с помощью Enabled/Disabled определенных элементов интерфейса (кнопок, панелей, радиобатанов).
Каким образом лучше всего сохранить в базе данные по настройкам для каждого пользователя и потом при входе в прогу применить эти настройки?
как вариант я думаю сохранять в базу приблизительно такие данные:
Цитата

UserId    |    ElementName    |      Status
------------------------------------------------
1            |  fMain.btAdmin    |      0
1            |  fDogovor.btOk    |      1
2            |  fMain.btAdmin    |      1
........

и т.д.
а при входе надо как-то применить эти настройки.... вот только не знаю как это правильно прописать..
PM MAIL WWW ICQ   Вверх
Guedda
Дата 23.3.2006, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Лучше всего, если пользователи не сильные в компах, написать все в Ini-файлах. Поищи по форуму, я уже постил про такое...
А если пользователи продвинутые, тогда лучше в реестр запихать.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Snowy
Дата 23.3.2006, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Лучше, не disabled, а visible.
Менять в OnShow формы.
PM MAIL   Вверх
Gorets
Дата 23.3.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



можно и visible... вот только как правильно это написать...
в базе хранится ведь стринговое значение fDogovor.btOk
как обратиться к подобному объекту???
т.е сделать fDogovor.btOk.visible:=True

Это сообщение отредактировал(а) Gorets - 23.3.2006, 14:45
PM MAIL WWW ICQ   Вверх
_hunter
Дата 23.3.2006, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



не с той стороны заходиш. нужно не к fDogovor.btOk.visible обращаться, а компонентом проверять значение...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Демо
Дата 23.3.2006, 15:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Gorets,

Я думаю, что ты совершенно правильно думаешь.
Только надо еще добавить поле "тип объекта", а поле статус должно иметь больше двух значений(например - только читать, читать и писать, только писать)

Применяется такая схема просто.

При первоначальной настройке выбираются все записи по данному пользователю с типом объекта "Интерфейс".
Объекты интерфейса обрабатываются в соответствии с полученными записями.

Для применения системы ограничений/разрешений во время работы программы нужно определиться, какие объекты будут задействованы в системе.

Это могут быть операции изменения, конкретные таблицы, файлы и т.д.

В БД добавляется хранимая процедура для проверки прав на конкретный объект.
И перед любой операцией проверять права доступа на необходимые объекты.
Конечно, только на словах выглядит все просто. На практике, конечно, всё значительно сложнее.


--------------------
    
PM MAIL ICQ Skype   Вверх
Gorets
Дата 23.3.2006, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



вот например получил я из базы данные:

fDogovor.btOk и 1

как мне теперь обратиться к объекту fDogovor.btOk и сделать его видимым?
может так? меня интересует синтаксис!
object(fDogovor.btOk).visible:=True;

PM MAIL WWW ICQ   Вверх
Демо
Дата 23.3.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 30
Всего: 50



Цитата(Gorets @ 23.3.2006, 16:03 Найти цитируемый пост)
как мне теперь обратиться к объекту fDogovor.btOk и сделать его видимым?


Тебе не нужно так делать.
Ведь интерфейсная часть - наиболее постоянная часть программы.
У тебя в программе ограниченный набор объектов интерфейса.
Зафиксируй для каждого такого объекта имя, под которым он будет находиться в БД. По сущестыу - таблица соответствия, которую тоже в БД можно вынести.




--------------------
    
PM MAIL ICQ Skype   Вверх
Gorets
Дата 23.3.2006, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



Цитата

Зафиксируй для каждого такого объекта имя

так я это и делаю..... только как потом по этому имени обратиться к объекту?

я делаю так:

Код

for i:=0 to qTemp.recordcount-1 do
begin
  elname:=qTemp.fieldbyname('ElName').asstring;
  status:=qTemp.fieldbyname('ElStatus').asboolean;
  //я получаю elname равен btOk, status равен 1
  //как теперь объекту btOk (кнопка) сделать visible:=1 ???

  qTemp.next;
end;

PM MAIL WWW ICQ   Вверх
bems
Дата 23.3.2006, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 31
Всего: 88



а что зы движок базы данных? может пожно на этом уровне все сделать?
ну или шифровать часть базы паролем юзера


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Gorets
Дата 23.3.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



кажется решил..

Код

for i:=0 to qTemp.recordcount-1 do    
begin    
  elname:=qTemp.fieldbyname('ElName').asstring;    
  status:=qTemp.fieldbyname('ElStatus').asboolean;    
  FindChildControl(elname).Visible:=status;
  qTemp.next;    
end;

PM MAIL WWW ICQ   Вверх
Gorets
Дата 23.3.2006, 17:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



Код

 FindChildControl('RadioButton1').Visible:=False;


все замечательно работает если объектом является Button,Panel,RadioButton и т.д.
а вот с элементами главного меню и контекстного меню такой вариант не проходит....
как быть?
PM MAIL WWW ICQ   Вверх
_hunter
Дата 23.3.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



ага. поэтому делаем не через cout, а по-человечески...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Gorets
Дата 23.3.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 30.5.2005

Репутация: нет
Всего: нет



жду примера в таком случае!!!
PM MAIL WWW ICQ   Вверх
Guedda
Дата 23.3.2006, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

Репутация: 14
Всего: 78



Цитата(_hunter @ 23.3.2006, 18:40)
ага. поэтому делаем не через cout, а по-человечески...

smile
По-моему, ты напутал форум с C++ smile


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0641 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.