Acl и Lotusscript

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

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

    LIGHT Гость

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

    Код:
    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

    Репутация:
    0
    Регистрация:
    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 Гость

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

    Hedg Гость

    Репутация:
    0
    aclentryRoles - точка пропущена Forall r In aclentry.Roles
     
  5. Medevic

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

    Репутация:
    0
    Регистрация:
    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 сделать:
    Код:
    Dim result As Variant
    
    result = Evaluate({@IsMember("[Admin]"; @UserRoles)})
    if result(0) = 1 Then 'Админ
     
  6. LIGHT

    LIGHT Гость

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

    Murtas Well-Known Member
    Lotus team

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

    LIGHT Гость

    Репутация:
    0
    Нет база разумеется на сервере
     
  9. Medevic

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

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

    Murtas Well-Known Member
    Lotus team

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

    Hedg Гость

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

    Код:
    	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 Гость

    Репутация:
    0
    <!--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

    Репутация:
    0
    Регистрация:
    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 Гость

    Репутация:
    0
    <!--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 Гость

    Репутация:
    0
    проверь
    как написано

    aclentry.Roles

    или

    aсlentry.Roles


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

    pashacrush New Member

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

    Omh Well-Known Member
    Lotus team

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

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

    Репутация:
    0
    Регистрация:
    22 авг 2008
    Сообщения:
    1.780
    Симпатии:
    42
    Вот я себе такое писал. Функция проверяет права пользователя на документ. В моем случае нужна проверка минимум на чтение.
    Функция берет роли пользователя, всех пользователей из необходимых Names-полей документа, далее берет всех пользователей из возможных груп и проверяет вхождение ролей пользователя или самого пользователя в полученном списке
    входной параметр UName - в каноническом виде
    на выходе True - есть доступ и False - соответственно нет.
    Код:
    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

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

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

    Репутация:
    0
    Регистрация:
    22 авг 2008
    Сообщения:
    1.780
    Симпатии:
    42
    без понятия. да и разбираться не хочется. я поделился тем что у меня работает
     
Загрузка...
Похожие Темы - Acl Lotusscript
  1. abdurtim
    Ответов:
    0
    Просмотров:
    368
  2. merovingian
    Ответов:
    5
    Просмотров:
    736
  3. cLif
    Ответов:
    1
    Просмотров:
    286
  4. NickProstoNick
    Ответов:
    14
    Просмотров:
    1.252
  5. Cleric-Lviv
    Ответов:
    5
    Просмотров:
    806
Статус темы:
Закрыта.

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