Понадобилось подключить на вебе дополнительную книгу для юзеров...
Вроде все стандартно, на базу Default - нет доступа, Anonymous - автор, Группа доступа через доп. справочник перечисленный в da.nsf, но в доке DIRECTORY ASSISTANCE есть такой неприятный кусок кода, который разрешает авторизацию по группе только по одному справочнику. Неудобно жутко!
Заремил я все это хозяйство. Авторизация по группам по нескольким справочникам для разных сайтов интернета заработала. Ну понятно - надо следить, чтоб имен таких групп не было одинаковых в разных базах DA, но стало зело удобнее.
Вот вопросы. На какие грабли можно наступить в дальнейшем? Как есть не радикальные способы, чтоб авторизация работала по группам из разных баз указанных в DIRECTORY ASSISTANCE?
Вроде все стандартно, на базу 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?
Последнее редактирование: