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

Тема в разделе "Lotus - Программирование", создана пользователем seoman2, 1 фев 2013.

  1. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Как получить роль пользователя, если юзер не указан явно в ацл, а входит в какую-то группу, к примеру Vasia в группу User?
    Set entery = acl.GetEntry(session.UserName) не найдет роль юзера, который не указан явно в ацл.
    В хелпе советуют db.QueryAccess
    но
    level% = db.QueryAccess(session.UserName)
    возвращает уровень доступа юзера, а не его роль.
     
  2. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    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.
     
  3. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    м.б. @UserRoles
     
  4. lionk

    lionk Well-Known Member

    Регистрация:
    5 апр 2007
    Сообщения:
    308
    Симпатии:
    3
    если в лотус скрипте и для контроля доступа пользуйся макросом:

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

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    Ну зачем использовать порнушный Evaluate, когда есть прекрасные
    QueryAccess
    QueryAccessRoles
    QueryAccessPrivileges
    ?
     
  6. lionk

    lionk Well-Known Member

    Регистрация:
    5 апр 2007
    Сообщения:
    308
    Симпатии:
    3
    А чё порнушный? Постоянно пользуюсь, явных косяков не замечал. Может чего не знаю.
     
  7. seoman2

    seoman2 Lotus team
    Lotus team

    Регистрация:
    17 фев 2010
    Сообщения:
    435
    Симпатии:
    0
    Rol = db.QueryAccessRoles (session.UserName) отлично работает!
     
  8. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    lionk
    Ну как бы сама конструкция порнушная :)
    Результат возвращается в вариант, тем более зависит от команды поданной в эвалуейт.
    Хотя да, работает :)

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

    savl Lotus team
    Lotus team

    Регистрация:
    28 окт 2011
    Сообщения:
    2.051
    Симпатии:
    146
    :)
    Только хардкор :lol:

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

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    savl
    Бро!!!
    Если писать спагетти кодом (как я не люблю), то можно преверить одной строкой:
    Код (LotusScript):
    HasRole = Not IsNull(ArrayGetIndex(db.QueryAccessRoles(session.Username); "[DESIRED_ROLE]"))
    И не надо порнушных эвалуэйтов @IsMember
     
  11. lionk

    lionk Well-Known Member

    Регистрация:
    5 апр 2007
    Сообщения:
    308
    Симпатии:
    3
    @UserRoles вернёт все роли, если пользователь в АЦЛ нет явно прописан, а есть только группа в которой он прописан.
    но если он прописан явно, то вернёт те роли которые навешены на пользователе, а роли на групах, где он есть, не будут отображены.
     
Загрузка...

Поделиться этой страницей