Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Назначение прав пользователей на таблицу

Delphi , Базы данных , Interbase

Назначение прав пользователей на таблицу

Автор: Dracula
WEB-сайт: http://delphibase.endimus.com

{ **** UBPFD *********** by delphibase.endimus.com ****
>> Назначение прав пользователей на таблицу

Какое может быть описание? И так все понятно. Кто делает эти формы?

Зависимости: uses IBQuery,IBDataBase,SysUtils
Автор:       Dracula, dracula@krruda.dp.ua, Krivoy Rog
Copyright:   Dracula
Дата:        28 января 2003 г.
***************************************************** }

unit IBRights;
interface

uses IBQuery, IBDataBase, SysUtils;

type
  TIBUserRights = record
    sel: Boolean;
    ins: Boolean;
    upd: Boolean;
    del: Boolean;
    exe: Boolean;
  end;

function GetUserRights(UserName, Relation: string; IBDb: TIBDataBase):
  TIBUserRights;
var
  Rights: TIBUserRights;

implementation

function GetUserRights(UserName, Relation: string; IBDb: TIBDataBase):
  TIBUserRights;
var
  Qr: TIBQuery;
  Tr: TIBTransaction;
begin
  if Assigned(IBDb) then
  begin
    Tr := TIBTransaction.Create(nil);
    try
      Tr.DefaultDatabase := IBDb;
      Qr := TIBQuery.Create(nil);
      Qr.Database := IBDb;
      Tr.StartTransaction;
      Qr.Close;
      Qr.Sql.Clear;
      Qr.Sql.Add('select RDB$USER,RDB$PRIVILEGE,RDB$RELATION_NAME ' +
        'from RDB$USER_PRIVILEGES ' +
        'where upper(RDB$USER)=:AUser ' +
        'and upper(RDB$RELATION_NAME)=:ARelation');
      Qr.Prepare;
      Qr.Params.ParamValues['AUser'] := AnsiUpperCase(UserName);
      Qr.Params.ParamValues['ARelation'] := AnsiUpperCase(Relation);
      Qr.Open;
      while not Qr.eof do
      begin
        if Copy(Trim(Qr.FieldByName('RDB$PRIVILEGE').AsString), 1, 1) = 'S' then
          Rights.sel := true
        else
          Rights.sel := false;
        if Copy(Trim(Qr.FieldByName('RDB$PRIVILEGE').AsString), 1, 1) = 'I' then
          Rights.ins := true
        else
          Rights.ins := false;
        if Copy(Trim(Qr.FieldByName('RDB$PRIVILEGE').AsString), 1, 1) = 'U' then
          Rights.upd := true
        else
          Rights.upd := false;
        if Copy(Trim(Qr.FieldByName('RDB$PRIVILEGE').AsString), 1, 1) = 'D' then
          Rights.del := true
        else
          Rights.del := false;
        if Copy(Trim(Qr.FieldByName('RDB$PRIVILEGE').AsString), 1, 1) = 'X' then
          Rights.exe := true
        else
          Rights.exe := false;
        if Copy(Trim(Qr.FieldByName('RDB$PRIVILEGE').AsString), 1, 1) = 'R' then
          //Rights.ref:=true else Rights.ref:=false;
        begin
          Rights.sel := true;
          Rights.ins := true;
          Rights.upd := true;
          Rights.del := true;
          Rights.exe := true;
        end;
        Qr.Next;
      end;
      Qr.Close;
      Tr.Commit;
      Qr.Free;
    finally
      Tr.Free;
    end;
  end;
  Result := Rights;
end;

end.

Пример использования:

uses....., IBRights;
......
var
  rights: TIBUserRights;

implementation
.....
begin
  ...
  rights := GetUserRights(DllLogin, NameTable, IBDataBase);
  .....
end;

Привет! Вот перевод на русский язык:

Единица Delphi, которая предоставляет функцию для получения прав пользователя для конкретной таблицы в базе данных InterBase. Функция GetUserRights принимает три параметра:

  • UserName: имя пользователя, чьи права получаются
  • Relation: имя таблицы или отношения, для которого получаются права
  • IBDb: экземпляр класса TIBDataBase, представляющий базу данных InterBase

Функция возвращает запись типа TIBUserRights, которая содержит четыре логические поля:

  • sel: имеет ли пользователь права на выборку из таблицы
  • ins: имеет ли пользователь права на вставку в таблицу
  • upd: имеет ли пользователь права на обновление таблицы
  • del: имеет ли пользователь права на удаление из таблицы
  • exe: имеет ли пользователь права на выполнение (это поле не используется в коде, но оно есть в определении записи)

Функция использует компонент IBQuery для выполнения SQL-запроса, который получает права пользователя из системной таблицы RDB$USER_PRIVILEGES. Запрос фильтрует результаты по имени пользователя и имени отношения. Функция затем проходит через результаты запроса, извлекая информацию о правах для каждого ряда. Если первый символ поля RDB$PRIVILEGE равен 'S', 'I', 'U', 'D' или 'X', соответствующее логическое поле в записи TIBUserRights устанавливается в true. В противном случае, оно устанавливается в false. Наконец, функция возвращает запись TIBUserRights, содержащую права пользователя для указанной таблицы. Пример использования в конце единицы покажет, как вызывать эту функцию и присваивать результат переменной rights.

Разработано утилитарное приложение для назначения прав пользователей на таблицу в базе данных InterBase.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Interbase ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-11-30 11:42:55
2024-12-10 23:39:37/0.0023550987243652/0