Acl и Lotusscript

Тема в разделе "Lotus - Программирование", создана пользователем LIGHT, 26 июн 2007.

Статус темы:
Закрыта.
  1. LIGHT

    LIGHT Гость

    Помогите выловить багу, досталась по наследству.
    В общем суть такова, есть документ который может редактировать только юзер с ролью [Admin]
    Заколбашена функция проверки, которую я уже тупо упростил до безобразия. Т.е. просто проверяю выведит ли ф-ия список ролей юзера

    Код (Text):
    Function isAdmin
    ............
    Dim acl As NotesACL
    Dim aclentry As NotesACLEntry
    Set db = ns.CurrentDatabase

    Set acl = db.acl
    Set aclentry = acl.GetEntry(ns.UserName)

    Forall r In aclentryRoles
    Messagebox(r)
    End Forall

    End Function
    Я сейчас вырезал все лишнее, хочу что бы функция только выдавала Message ролей у юзера.
    Но происходит Object Variable not Set
    Где копать уже ума не приложу.
     
  2. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Копай здесь:
    <!--QuoteBegin-LIGHT+26:06:2007, 12:08 -->
    <span class="vbquote">(LIGHT @ 26:06:2007, 12:08 )</span><!--QuoteEBegin-->Forall r In aclentryRoles
    [snapback]70601" rel="nofollow" target="_blank[/snapback]​
    [/quote]
     
  3. LIGHT

    LIGHT Гость

    Да, тут и копаю, только уже почти закопался :)
     
  4. Hedg

    Hedg Гость

    aclentryRoles - точка пропущена Forall r In aclentry.Roles
     
  5. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    <!--QuoteBegin-LIGHT+26:06:2007, 12:17 -->
    <span class="vbquote">(LIGHT @ 26:06:2007, 12:17 )</span><!--QuoteEBegin-->Да, тут и копаю, только уже почти закопался
    [snapback]70604" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Точку поставить забыл в "aclentryRoles". Найдешь где? :)

    <!--QuoteBegin-LIGHT+26:06:2007, 12:08 -->
    <span class="vbquote">(LIGHT @ 26:06:2007, 12:08 )</span><!--QuoteEBegin-->В общем суть такова, есть документ который может редактировать только юзер с ролью [Admin]
    [snapback]70601" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Сделай по-нормальному через поле типа Authors.

    А так можно еще через Evaluate сделать:
    Код (Text):
    Dim result As Variant

    result = Evaluate({@IsMember("[Admin]"; @UserRoles)})
    if result(0) = 1 Then 'Админ
     
  6. LIGHT

    LIGHT Гость

    А точку я тут забыл поставить, в бивал код кучками. В оригинале она есть.
    Другие методы не подходят по ряду причин. Интересует именно почему не работает в такой конструкцие, причем в хелпе есть аналогичный пример.
     
  7. Murtas

    Murtas Well-Known Member

    Регистрация:
    11 апр 2006
    Сообщения:
    123
    Симпатии:
    0
    Для: LIGHT
    опять же - может база локальная?
     
  8. LIGHT

    LIGHT Гость

    Нет база разумеется на сервере
     
  9. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: LIGHT
    В какой строке ошибка?
     
  10. Murtas

    Murtas Well-Known Member

    Регистрация:
    11 апр 2006
    Сообщения:
    123
    Симпатии:
    0
    ..в каком месте останавливается хотя бы - так гадать трудно ... может у тебя например ns не инициализированно
     
  11. Hedg

    Hedg Гость

    У меня получилось так

    Код (Text):
        Dim acl As NotesACL
    Dim aclentry As NotesACLEntry
    Dim session As New NotesSession
    Set db=session.CurrentDatabase
    Set acl = db.acl
    Set aclentry = acl.GetEntry(session.UserName)

    Forall r In aclentry.Roles
    Messagebox(r)
    End Forall
     
  12. LIGHT

    LIGHT Гость

    <!--QuoteBegin-Medevic+26:06:2007, 12:26 -->
    <span class="vbquote">(Medevic @ 26:06:2007, 12:26 )</span><!--QuoteEBegin-->Dim result As Variant

    result = Evaluate({@IsMember("[Admin]"; @UserRoles)})
    if result(0) = 1 Then 'Админ
    [snapback]70606" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Взял этот пример, работает. Еще не изучил как повлияет на логику остального кода...
    Почему не рабоал мой пример фиг знает.
    Все переменные инициализированы.... в общем какая-то бяка, дебагер затыкался тут<!--QuoteBegin-LIGHT+26:06:2007, 12:08 -->
    <span class="vbquote">(LIGHT @ 26:06:2007, 12:08 )</span><!--QuoteEBegin-->Forall r In aclentry.Roles
    [snapback]70601" rel="nofollow" target="_blank[/snapback]​
    [/quote]
     
  13. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Для: LIGHT
    <!--QuoteBegin-LIGHT+26:06:2007, 12:08 -->
    <span class="vbquote">(LIGHT @ 26:06:2007, 12:08 )</span><!--QuoteEBegin-->Set aclentry = acl.GetEntry(ns.UserName)
    [snapback]70601" rel="nofollow" target="_blank[/snapback]​
    [/quote]

    Пользователь ns.UserName в ACL точно есть?
     
  14. LIGHT

    LIGHT Гость

    <!--QuoteBegin-Medevic+26:06:2007, 14:33 -->
    <span class="vbquote">(Medevic @ 26:06:2007, 14:33 )</span><!--QuoteEBegin-->Пользователь ns.UserName в ACL точно есть?
    [snapback]70633" rel="nofollow" target="_blank[/snapback]​
    [/quote]
    Конечно есть
     
  15. Domino6

    Domino6 Гость

    проверь
    как написано

    aclentry.Roles

    или

    aсlentry.Roles


    Смотри в сторону русской "с"
     
  16. pashacrush

    pashacrush New Member

    Регистрация:
    18 июн 2009
    Сообщения:
    1
    Симпатии:
    0
    Если пользователя нет явно в ALC(например он будет просто в какой-то группе), то код выдас ошибку
     
  17. Omh

    Omh Lotus team
    Lotus team

    Регистрация:
    4 июл 2007
    Сообщения:
    2.210
    Симпатии:
    0
    А
    Код (Text):
    db.QueryAccessRoles
    отменили?
     
  18. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    Вот я себе такое писал. Функция проверяет права пользователя на документ. В моем случае нужна проверка минимум на чтение.
    Функция берет роли пользователя, всех пользователей из необходимых Names-полей документа, далее берет всех пользователей из возможных груп и проверяет вхождение ролей пользователя или самого пользователя в полученном списке
    входной параметр UName - в каноническом виде
    на выходе True - есть доступ и False - соответственно нет.
    Код (Text):
    Function CheckUserRoles( Doc As NotesDocument, UName As Variant ) As Boolean
    Dim Session As New NotesSession
    Dim DB As NotesDatabase
    Dim RolesArray As Variant
    Dim MembersArray As Variant
    Dim res
    Dim i As Integer


    Redim RolesArray(0) As Variant

    Set DB = Session.CurrentDatabase

    MembersArray = {
    authors := AuthorsID:AddAuthorsID:DefAuthorsID:ReadersID:AddReadersID;
    authors := @ExpandNameList(@Subset(@DbName; 1);authors);
    @Unique(@Trim(authors)); }

    MembersArray = Evaluate( MembersArray, Doc )

    RolesArray = DB.QueryAccessRoles( Uname )

    MembersArray = Arrayreplace( MembersArray, RolesArray, "^" )
    res = Arraygetindex( MembersArray, "^" )

    If Not Isnull( res ) Then
    CheckUserRoles = True              
    Exit Function
    End If

    MembersArray = Arrayreplace( MembersArray, UName, "^" )
    res = Arraygetindex( MembersArray, "^" )

    If Not Isnull( res ) Then
    CheckUserRoles = True              
    Exit Function
    End If

    For i = 0 To Ubound( MembersArray )

    If Instr( MembersArray(i), "<тут я пишу начало названия группы. у меня оно одинаковое для всех групп>" ) = 0 Then
    MembersArray(i) = ""
    End If 

    Next

    MembersArray = Fulltrim( MembersArray )

    For i = 0 To Ubound( MembersArray )

    RolesArray = Arrayappend( RolesArray, Split( GetGroupMembers( "", "", MembersArray(i), ";", False ), ";" ) )
    Next


    MembersArray = Arrayreplace( RolesArray, UName, "^" )  
    res = Arraygetindex( MembersArray, "^" )

    If Not Isnull( res ) Then
    CheckUserRoles = True              
    End If

    End Function
    GetGroupMembers - функция возвращает список пользователей всех групп, включая вложенности.
    ее уже пиши сам или выкидывай если не надо
     
  19. azat20

    azat20 Well-Known Member

    Регистрация:
    22 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    aclentry.values - может такое проканает?
     
  20. NickProstoNick

    NickProstoNick Статус как статус :)

    Регистрация:
    22 авг 2008
    Сообщения:
    1.766
    Симпатии:
    39
    без понятия. да и разбираться не хочется. я поделился тем что у меня работает
     
Загрузка...
Похожие Темы - Acl Lotusscript
  1. cLif
    Ответов:
    0
    Просмотров:
    83
  2. NickProstoNick
    Ответов:
    14
    Просмотров:
    636
  3. Cleric-Lviv
    Ответов:
    5
    Просмотров:
    573
  4. anna
    Ответов:
    17
    Просмотров:
    1.686
  5. CBOSS
    Ответов:
    0
    Просмотров:
    1.057
Статус темы:
Закрыта.

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