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

Поиск:

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


Бывалый
*


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

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



И прилагаю второй пример.
И с нимже опять проблема.

Не могу сделать ввод пароля и логина и что бы она читала логин и пасс с БД и на соответствующий уровень доступа она прятало элементы (

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Project2.rar 23,70 Kb
PM MAIL   Вверх
Elfebet
Дата 7.3.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

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



вот посмотри этот пример (это твой переделанный)



Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  Project.rar 23,70 Kb


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
ama_kid
Дата 8.3.2007, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Цитата
ИМХО тада и тэги хранить тоже бред, лучше всего сохранять индекс компонента, тогда и не надо содавать массив, так как индекс компонента всегда уникальный.

Нет, на самом деле, это не совсем бред - индекс компонента - он, конечно, уникальный, но все-таки при определенных условиях может меняться (ну убрали кнопку с формы или еще что-нибудь сделали с формой - индекс поменяется у остальных элементов - что, всю БД перелопачивать вручную и переставлять индексы?). А тэг - это скорее не уникальный идентификатор компонента, а если так можно выразиться идентификатор уровня доступа. Т.е. ты можешь назначить нескольким элементам одинаковый тэг и тогда они будут видны при одинаковых условиях. И получается, в БД можно хранить не индексы компонентов, а уровни доступа/имя пользователя/пароль... И вообще, я не упирал на то, что надо использовать массивы - я этот пример за две минуты налабал просто чтоб показать как работать с компонентами - массивы - просто первое, что пришло в голову, ясно, что оптимизация имеет место и должна быть... smile

Anakin
Цитата
Но вот как к этой процедуре прикрутить базу с Логином паролем и уровнем доступа. Вот сиджу и чешу репу и никак не допираю.

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

Это сообщение отредактировал(а) ama_kid - 8.3.2007, 09:25

Присоединённый файл ( Кол-во скачиваний: 29 )
Присоединённый файл  MyTestDB.rar 14,94 Kb


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Anakin
  Дата 12.3.2007, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



2 ama_kid Респект тебе. Замечательный пример. И я согласен с тем что с TEG Куда всё проще.
Вот сижу сейчас и ковыряю твой пример. Нет ну прямо любоуюсь как тут всё до тупости проста. Тока оптимизировать нуна и всё.
ОГРОМНОЕ Спасибо тебе.

2 Админам и Модерам
Если мона прикрутите эту тему Ибо она многим нужна.
PM MAIL   Вверх
Anakin
Дата 12.3.2007, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



2 ama_kid Прошу прощения за настоичивость и назойливость. Но у меня возник вопрос.
По твоему коду.

Код

procedure TForm1.SetCurrentAccessLevel;
var
 i:integer;
 AccLvl:integer;
begin
 if not flSelected then exit;
 aq.Close;
 aq.SQL.Text:='SELECT [User],[Password],[AccessLevel] FROM One WHERE [User]='''+CurName+'''';
 try
  aq.Open;
 except
 end;
 if aq.RecordCount = 0 then
  ShowMessage('Íåò òàêîãî þçåðà.')
 else
  try
   AccLvl:=aq.Recordset.Collect[2];
   if string(aq.Recordset.Collect[1])=CurPass then
     for i:=0 to Form1.ComponentCount-1 do
      begin
       if Form1.Components[i].Tag= 0 then continue else
       if (Form1.Components[i] is TControl)then (Form1.Components[i] as TControl).Enabled :=AccLvl>=Form1.Components[i].Tag
       else if (Form1.Components[i] is TMenuItem)then (Form1.Components[i] as TMenuItem).Enabled :=AccLvl>=Form1.Components[i].Tag;
      end
    else ShowMessage('Íåïðàâèëüíûé ïàðîëü.');
  except
   ShowMessage('Íåóäà÷íî.');
  end;
  flSelected:=false;
end;


Как тут производитса расчет уровня доступа.
Тоесть откуда программа знает что даёт 1 ЛвЛ доступа и 6 ЛвЛ доступа.

Зарание Благодарен.


Это сообщение отредактировал(а) Anakin - 12.3.2007, 14:26
PM MAIL   Вверх
ama_kid
Дата 12.3.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



Anakin
Давай по шагам:
1) Получение параметров текущего юзера (по имени):
Код
 aq.SQL.Text:='SELECT [User],[Password],[AccessLevel] FROM One WHERE [User]='''+CurName+'''';
 try
  aq.Open;
 except
 end;

2) Определение уровня доступа для юзера, который ему выделил "виртуальный админ", и который забит в базу данных:
Код
AccLvl:=aq.Recordset.Collect[2]; // Потому, что [AccessLevel] идет третьим в SQL-запросе (нумерация от 0)

3) В цикле по всем компонентам: у каждого компонента есть свойство Tag, которое в данном приложении обозначает буквально следуюущее: "Минимальный уровень доступа, который нужно иметь юзеру, чтобы иметь возможность работать с данным компонентом". А операнд
Код
 (Form1.Components[i] as TControl).Enabled :=AccLvl>=Form1.Components[i].Tag 
 делает ни что иное, как производит сравнение текущего уровня доступа и включение/отключение конкретного контрола по результату сравнения


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
Страницы: (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.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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