Дополнительная авторизация по группе в DIRECTORY ASSISTANCE?

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
Понадобилось подключить на вебе дополнительную книгу для юзеров...
Вроде все стандартно, на базу Default - нет доступа, Anonymous - автор, Группа доступа через доп. справочник перечисленный в da.nsf, но в доке DIRECTORY ASSISTANCE есть такой неприятный кусок кода, который разрешает авторизацию по группе только по одному справочнику. Неудобно жутко!
Код:
Sub Querysave(Source As Notesuidocument, Continue As Variant)

    Const MSG_DEAD_RULE            = |One or more rules for this directory assistance document are now unreachable.  This is because the rule(s) are not marked Trusted, but you have enabled "Use exclusively for Group Authorization or Credential Authentication".  The rule will only be followed if this directory is not being used exclusively for group authorization or credential authentication.|
    Const TITLE_WARNING            = "Warning"
    Const ITEM_TRUSTED_PREFIX     = "Trusted_"
    Const ITEM_ORG_PREFIX        = "Org_"
    Const RULE_UPPER_BOUND         = 4

    Dim S As New NotesSession
    Dim Db As NotesDatabase
    Dim View As NotesView
    Dim Doc As NotesDocument
    Dim note As notesdocument
    Dim sItemName As String
    Dim iIndex As Integer
    Dim GrExp As Variant
    Dim ExGrAuth As Variant
    Dim DomainName As Variant
    Dim x As Variant

    Set Db = S.CurrentDatabase
    Set View=Db.GetView("($DirectoryAssistance)")
    Set Doc= View.GetFirstDocument
    Set note  = source.document
    GrExp = note.getitemvalue("GroupExpansion")
    ExGrAuth = note.GetItemValue("AuthenticationOrAuthorization")

    ' check for dead rules
    If GrExp(0) = "0" Then
        If ExGrAuth(0) = "1" Then
            For iIndex = 0 To RULE_UPPER_BOUND
                sItemName = ITEM_ORG_PREFIX + Cstr(iIndex)
                If note.GetItemValue(sItemName)(0) <> "" Then
                    sItemName = ITEM_TRUSTED_PREFIX + Cstr(iIndex)
                    If note.GetItemValue(sItemName)(0) = "0" Then
                        Msgbox MSG_DEAD_RULE,48,TITLE_WARNING
                        Exit For
                    End If
                End If
            Next
        End If
    End If

    ' do group expansion
    If GrExp(0) = "0" Then
        Exit Sub
    End If

%REM
    'Заремил 2019-01-11 чтобы авторизовалось по группам в еще одном справочнике

    While Not(Doc Is Nothing)
        x=Doc.GetItemValue("GroupExpansion")

        If x(0) = "1"  And GrExp(0) = "1" And note.universalid <> doc.universalid Then
            DomainName = doc.getitemvalue("DomainName")
            Msgbox "The document with the Domain Name '" + DomainName(0) + "' already has Group Authorization enabled.  Only one such document is allowed in this database.", 16
            continue = False
            Exit Sub
        End If
        Set Doc=View.GetNextdocument(Doc)
    Wend
%END REM


End Sub

Заремил я все это хозяйство. Авторизация по группам по нескольким справочникам для разных сайтов интернета заработала. Ну понятно - надо следить, чтоб имен таких групп не было одинаковых в разных базах DA, но стало зело удобнее.

Вот вопросы. На какие грабли можно наступить в дальнейшем? Как есть не радикальные способы, чтоб авторизация работала по группам из разных баз указанных в DIRECTORY ASSISTANCE?
Untitled.png
 
Последнее редактирование:
  • Нравится
Реакции: rinsk

rinsk

Lotus Team
12.11.2009
1 156
126
BIT
46
Какие грабли-кто его знает:) но прикольно, что работает)
Для аггрегаци групп и пользователей, есть directory cataloger. Всё работает отлично - но есть задержка после регистрации пользователя/группы и запуска таска агрегации.
Есть и поддержка уникальности групп и веб юзверей можно регить в левой бд.
 
Последнее редактирование:

Domino-Designer

Людям надо поморгать!
Lotus Team
06.12.2011
617
223
BIT
25
@NetWood, а по NRPC авторизация в ACL у тебя теперь то двум справочникам? А Readers\Authors?
 

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
@NetWood, а по NRPC авторизация в ACL у тебя теперь то двум справочникам? А Readers\Authors?
Собственно, да. Можно подключить несколько справочников, в моем случае для двух, в каждой назначить группу и указать в ACL. Суть в том, что юзера для каждого сайта в отдельных книгах, а не в свалке по группам в одной базе.

Чтоб не запутаться, имена групп называем по понятиям, например, DA_site_users и DA_site_users_RESTRICT и у же в ACL прописываем кому чего можно. В самом справочнике ручками или скриптом переносим юзеров из группы в группу при необходимости. Вложенные группы тоже не отменяются. Например, чтоб не мучить юзеров, можно им давать доступ к разным сайтам без дополнительных регов. Это хорошо работает.
 
  • Нравится
Реакции: Domino-Designer

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
472
как на мой взгляд...
так будет удобнее если управление группами разнесено и у приложений отдельные менеджеры, но я мало вижу такую ситуацию
уж тогда надо решать уровнем сервера/домена/организации/юнита ;)
Ведь если есть группа - её надо как-то добавлять в приложение, а это должен делать менеджер.
В результате - если менеджер управляет ACLами баз - то дать доступ на группу, в любой АК - не является чем-то странным, и группы лучше хранить более-менее централизовано. А вот учет уникальности групп - опять приходим к централизации управления.
Т.о. фича забавная, но малонужная, а расчитана скорее-всего на внешний ЛДАП (потому и одна - ток для ЛДАП)
 

NetWood

Lotus Team
17.04.2008
565
96
BIT
174
Про ЛДАП полезное замечание, да. Но в классик вебе он тоже ни к чему. Юзера регаются сами, а уж как им варенье раздавать спору нет - хочешь из одной банки, хочешь из разных. Всем по вкусу.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!