Получение Роли Для Члена Группы В Acl

seoman2

Lotus team
17.02.2010
473
1
#1
Как получить роль пользователя, если юзер не указан явно в ацл, а входит в какую-то группу, к примеру Vasia в группу User?
Set entery = acl.GetEntry(session.UserName) не найдет роль юзера, который не указан явно в ацл.
В хелпе советуют db.QueryAccess
но
level% = db.QueryAccess(session.UserName)
возвращает уровень доступа юзера, а не его роль.
 

susinmn

Well-known member
16.10.2007
529
3
#2
QueryAccessRoles method

Returns the roles of a person, group, or server in a database.
Note This method is new with Release 6.

Syntax
roles = notesDatabase.QueryAccessRoles( name$ )

Parameters
name$
String. The name of the person, group, or server.
Return value
roles
String array.
If the name has roles, each element of the array contains one role. Each role name is surrounded by square brackets, for example, "[Supervisor]."
If the name has no roles, the array has one element that contains an empty string.
Usage
If the name you specify is listed explicitly in the ACL, then QueryAccessRoles returns the roles for that ACL entry and does not check groups.
If the name you specify is not listed explicitly in the ACL, QueryAccess checks to see if the name is a member of a group in the primary address book where the program is running: on a workstation the Personal Address Book; on a server the Domino Directory.

или

Evaluate({@UserNamesList })

Note This @Function is new with Release 5.
Syntax
@UserNamesList
Return value
names
Text list. Each list item is a name or role as specified above. Returns an empty string ("") if the current database is local and "Enforce a consistent Access Control List across all replicas" is not in effect, and the database is not replicated with the server database at least once.
 

lionk

Well-known member
05.04.2007
310
2
#4
если в лотус скрипте и для контроля доступа пользуйся макросом:

Dim ret As Variant
ret=Evaluate(|@IsMember("[Admin]" ; @UserRoles)|)

If ret(0)="1" Then
ну тут ты понял
end if
 

Omh

Lotus team
04.07.2007
2 210
1
#5
Ну зачем использовать порнушный Evaluate, когда есть прекрасные
QueryAccess
QueryAccessRoles
QueryAccessPrivileges
?
 

Omh

Lotus team
04.07.2007
2 210
1
#8
lionk
Ну как бы сама конструкция порнушная :)
Результат возвращается в вариант, тем более зависит от команды поданной в эвалуейт.
Хотя да, работает :)

Ну, и, собственно, порнушный - не значит плохой :)
Скорее, даже, наоборот. :lol:
 

savl

Lotus team
28.10.2011
2 136
105
#9
:)
Скорее, даже, наоборот. laugh.gif
Только хардкор :lol:

а если по теме:
Код:
Rol = db.QueryAccessRoles (session.UserName)
Так же вернет String array, что бы найти нужную роль (если не одна) в массиве его надо будет перебрать.
Код:
Evaluate(|@IsMember("[Admin]"; @UserRoles)|)
Вернет результат наличия роли.
С другой стороны, если верить Help, QueryAccessRoles вернет роли на основе групп, если User не прописан явно, а вот @UserRoles не вернет.
Так что вопрос даже не вкуса, а области/места применения, ну и задачи.
 

Omh

Lotus team
04.07.2007
2 210
1
#10
savl
Бро!!!
Если писать спагетти кодом (как я не люблю), то можно преверить одной строкой:
Код:
HasRole = Not IsNull(ArrayGetIndex(db.QueryAccessRoles(session.Username); "[DESIRED_ROLE]"))
И не надо порнушных эвалуэйтов @IsMember
 

lionk

Well-known member
05.04.2007
310
2
#11
С другой стороны, если верить Help, QueryAccessRoles вернет роли на основе групп, если User не прописан явно, а вот @UserRoles не вернет.
@UserRoles вернёт все роли, если пользователь в АЦЛ нет явно прописан, а есть только группа в которой он прописан.
но если он прописан явно, то вернёт те роли которые навешены на пользователе, а роли на групах, где он есть, не будут отображены.