Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Алексей Васильев
Зарегистрирован: 20.05.2009 Сообщения: 105 Откуда: Самара
|
Добавлено: Пт 02 Июл 2010 15:14 Заголовок сообщения: Как определить пользовательскую группу? |
|
|
Собственно, нужно закрыть некоторым категориям (группам) пользователей возможность записи в таблицы, не являющиеся семантикой Ингео, поэтому в свойствах группы это не прокатит.
Из InGeoIntfs я понял, как можно получить идентификатор и имя пользователя, но принадлежность к группе (группам) - не понятно. Там еще есть список ролей, но что с этими ролями можно делать - тоже не понятно. |
|
Вернуться к началу |
|
 |
СергейТ
Зарегистрирован: 17.06.2005 Сообщения: 44 Откуда: Новосибирск
|
Добавлено: Сб 03 Июл 2010 12:19 Заголовок сообщения: |
|
|
Здравствуйте, я это делаю через проверку принадлежности пользователя к заданной роли.
Код: | /// <summary>
/// Проверяет принадлежность текущего пользователя к роли
/// </summary>
/// <param name="RoleName">Имя роли</param>
/// <returns>Да или Нет</returns>
public bool CheckUser(String RoleName)
{
string sUser = ingeoPanel.axIngeoMapXControl.Ingeo.ActiveDb.LogonUserID;
IIngeoUser IU = ingeoPanel.axIngeoMapXControl.Ingeo.ActiveDb.Users.UserFromID(sUser);
object mas = IU.RoleIDs;
object[] masobj = (object[])mas;
for (int i = 0; i < masobj.Length; i++)
{
IIngeoRole IR = ingeoPanel.axIngeoMapXControl.Ingeo.ActiveDb.Roles.RoleFromID(masobj[i].ToString());
if (IR.Name == RoleName)
{
return true;
}
}
return false;
} |
|
|
Вернуться к началу |
|
 |
Алексей Васильев
Зарегистрирован: 20.05.2009 Сообщения: 105 Откуда: Самара
|
Добавлено: Пн 05 Июл 2010 17:08 Заголовок сообщения: |
|
|
Спасибо огромное! Оазывается, роль - это собственно говоря, группа и есть.
К сожалению, столь же изящно у меня не получилось, кое-то пришлось сделать по "рабоче-крестьянски" не обессудьте:
Код: |
function CheckUserIn(GroupName: string) : boolean; // проверка допуска пользователя
var
IngeoUser : IIngeoUser;
i,c : integer;
RID : TM2ID;
ro : OLEvariant;
begin
with ActiveDB do begin
c := Roles.Count;
for I := 0 to c - 1 do with roles[i] do if GroupName=Name then begin RID:=ID; break end;
IngeoUser := Users.UserFromID(LogonUserID);
ro := IngeoUser.RoleIDs;
c := sizeof(ro) div sizeof(TM2ID);
for i := 0 to c-1 do if RID = ro[i] then begin result := true; exit end
end;
result := false
end;
|
|
|
Вернуться к началу |
|
 |
APopov
Зарегистрирован: 19.06.2006 Сообщения: 347 Откуда: Самара
|
Добавлено: Пн 05 Июл 2010 18:50 Заголовок сообщения: |
|
|
Вот вам еще код для работы ролями, мож пригодиццо
Код: |
const
ingeoAdminGUID = '0';
ingeoAdminUserID='000000000003';
ingeoAdminRoleID='000000000004';
function RoleOrUserIsAdmin(const InDB :IIngeoDb; const aID:string; isRole:boolean):boolean;
var roles :OleVariant;
i :integer;
begin
if (aID=ingeoAdminGUID)or(aID=ingeoAdminUserID)or(aID=ingeoAdminRoleID)
then Result := true
else
if not isRole then begin //проверим роли пользователя
roles := InDB.Users.UserFromID(aID).RoleIDs;
Result := true;
for i:=VarArrayLowBound(roles, 1) to VarArrayHighBound(roles, 1) do
if SameText(roles[i], ingeoAdminRoleID) then exit;
Result := false;
end
else Result := false;
end; |
_________________ ОАО "Самара-Информспутник",
инженер-программист Попов Артем |
|
Вернуться к началу |
|
 |
|