пятница, 24 июля 2009 г.

Как назначить права в скрипте карточки

Пример назначения прав на карточку из скрипта карточки (через ADSI):

' Rights
iRights = &H1 + &H2 ' read+change!
aEmpl = Array ("DOMAIN\User1","DOMAIN\User2")

' Get secure object
Set oSecureObj = UserSession.AccessManager.GetSecureCard(CardData.ID)
Set oSD = oSecureObj.ADsSecurityDescriptor
Set oDACL = oSD.DiscretionaryAcl

' remove old ace's
Do
bFlag = False
For Each oACE In oDACL
oDACL.RemoveAce (oACE)
bFlag = True
Next
Loop Until bFlag = False

' Add Rights
For n = 0 To iCount
sEmpl = aEmpl(n)
If CStr(sEmpl) <> "" Then
Set oNewAce = CreateObject("AccessControlEntry")
oNewAce.AccessMask = iRights
oNewAce.AceType = 0 ' allowed
oNewAce.AceFlags = 2 'inherit
oNewAce.Trustee = sEmpl
oDACL.AddAce oNewAce
End If
Next
Set oSecureObj.ADsSecurityDescriptor = oSD



Список прав (все значения являются битовой маской и могут суммироваться):

"000F001F"
Полный доступ

"00000001"
Чтение данных объекта

"00000002"
Изменение данных объекта

"00000004"
Создание дочерних объектов

"00000008"
Удаление дочерних объектов

"00000010"
Копирование объекта

"00010000"
Удаление объекта

"00020000"
Чтение разрешений

"00040000"
Изменение разрешений

"00080000"
Смена владельца

"00020001"
Чтение

"0000001E"
Изменение

"00010000"
Удаление

"000C0000"
Владение


При назначении прав в бизнес-процессе или из .net приложений, нужно пользоваться методами .net framework

4 комментария:

  1. А как "сносить" права на карточку из БП? Универсальной функцией назначать новые права можно, но почти всегда требуется удалить перед этим старые.

    ОтветитьУдалить
  2. Есть пример очистки прав в http://dvprofessionals.blogspot.com/2009/02/docsvision-api.html

    ОтветитьУдалить
  3. В правах есть разграничения по применению прав :

    "Этот объект, дочерние контейнеры и объекты"
    - "Этот объект и дочерние контейнеры"
    - "Этот объект и дочерние объекты (не контейнеры)",
    - "Только дочерние контейнеры и объекты",
    - "Только дочерние контейнеры"
    - "Только дочерние объекты (не контейнеры)",
    - "Только этот объект"

    Необходимо отдельно назначить разные права на
    -"Только этот объект",
    - Только дочерние контейнеры
    -"Только дочерние объекты (не контейнеры)"

    Пробуем не получается, как в скрипте указывать к каким из этих категорий назначаются права ?

    ОтветитьУдалить
  4. Исходя из примера, свойство AceFlags как раз и содержит параметр наследования. Что получить какое значение соответствует какому параметру можно перебрать уже существующие права, например подобным циклом:
    For Each oACE In oDACL
    MsgBox oACE.AceFlags
    Next

    ОтветитьУдалить