Тема: Назначение пользователя на роль!!!

Товарищи!!! Помогите...нужна команда для выполнения следующей операции:[size="3"][/size]
команда выбирает пользователя из коллекции пользователей и дает ему например какую либо роль(чтобы тоже выбиралась из коллекции ролей) на выбранном объекте!!!

Я не силен в программировании ВОООБЩЕ  :unsure: ....ПОМОГИТЕ ЛЮДИ ДОБРЫЕ!!!

(изменено: vorona, 11 декабря 2009г. 09:47:08)

Re: Назначение пользователя на роль!!!

ну вот как то так, показывает диалог с пользователями и группами, можно выбрать пользователя или группу и назначить им роль на объекте с которого вызвана команда. код нужно доработать.

Option explicit

call main(ThisObject)

sub main(obj)
    ' процедура назначения пользователей на роль
    ' выбирается из диалога пользователя или группы
    dim usersDlg
    dim selectedUsers, selectedGroups
    dim user, group
    dim usersTable
    dim objRoles
    obj.Permissions = SysAdminPermissions
    set objRoles = obj.Roles

    ' диалог выбора
    set usersDlg = ThisApplication.Dialogs.SelectUserDlg
    usersDlg.Show
    if usersDlg.Groups.Count > 0 then
        ' если выбрали хоть одну группу
        set selectedGroups = usersDlg.Groups
        ' для каждой группы
        for each group in selectedGroups
            ' добавить роль на группу
            call addRole(objRoles, group.SysName)
        next
    end if
    
    if usersDlg.Users.Count > 0 then
        ' если выбрали хоть одного пользователя
        set selectedUsers = usersDlg.Users
        ' для каждого пользователя
        for each user in selectedUsers
            ' добавить этих пользователей
            call addRole(objRoles, user.SysName)
        next
    end if
end sub

Function roleExists(objRoles, roleName, userName)
    dim role
    
    roleExists = False
    for each role in objRoles
        if role.User is nothing then
            roleExists = roleExists or ((role.RoleDef.SysName = roleName) and _
            (role.Group.SysName = userName))
        else
            roleExists = roleExists or ((role.RoleDef.SysName = roleName) and _
            (role.User.SysName = userName))
        end if
    next
End Function


Sub addRole(objRoles, userName)
    
    dim role, roleName
    dim arr(), rearr
    dim slDlg
    dim slRoles, i
    
    set slRoles = ThisApplication.RoleDefs
    
    i = 0
    for each role in slRoles
      i = i + 1      
      ReDim Preserve arr(i)
      set arr(i) = role
    next
    set slDlg = ThisApplication.Dialogs.SelectDlg
    slDlg.SelectFrom = arr
    if slDlg.Show = False then
       Exit sub
    else
      rearr = slDlg.Objects
      if ubound(slDlg.Objects) = 0 then
        set role = rearr(0)
        roleName = role.sysname  
      else if ubound(slDlg.Objects) > 0 then
        msgbox("выбрано слишком много ролей")
        Exit sub
      end if
      end if
    end if
    
    if not roleExists(objRoles, roleName, userName) then
        set role = objRoles.create(roleName, userName)
    else MsgBox "Такая роль уже существует на объекте!", vbExclamation
    end if
    
End Sub

Re: Назначение пользователя на роль!!!

СПАСИБА больШОе)))))))))))))) Вроде работает!!!!!!!!!!!!!!!!!!!! Напишу тогда как обтестю  :rolleyes:
Еще РАЗ СПАСИБА!!!

Re: Назначение пользователя на роль!!!

на здоровье    :)

Re: Назначение пользователя на роль!!!

vorona пишет:

на здоровье    :)

А вот такой момент...вот выбрали пользователя дали ему роль..все отлично...а как сделать так что бы он еще и автоматом получал сообщение о том что " Вы назначены на роль такуюто, таковото объекта"??????? БУДУ ВЕК БЛАГОДАРЕН)))))))))

Re: Назначение пользователя на роль!!!

abicov пишет:

А вот такой момент...вот выбрали пользователя дали ему роль..все отлично...а как сделать так что бы он еще и автоматом получал сообщение о том что " Вы назначены на роль такуюто, таковото объекта"??????? БУДУ ВЕК БЛАГОДАРЕН)))))))))

в общем вот. Под себя доработать напильником.   :rolleyes:

Option explicit

call main(ThisObject)

sub main(obj)
 ' процедура назначения пользователей на роль
    ' выбирается из диалога пользователя или группы
    dim usersDlg
    dim selectedUsers, selectedGroups
    dim user, group
    dim usersTable
    dim objRoles
    dim eBody
    obj.Permissions = SysAdminPermissions
    set objRoles = obj.Roles

    ' диалог выбора
    set usersDlg = ThisApplication.Dialogs.SelectUserDlg
    usersDlg.Show
    if usersDlg.Groups.Count > 0 then
        ' если выбрали хоть одну группу
        set selectedGroups = usersDlg.Groups
        ' для каждой группы
        for each group in selectedGroups
            ' добавить роль на группу
            eBody = ""
            call addRole(objRoles, group.SysName, eBody)
            if eBody <> "" then
              eBody = eBody + " группе пользователей "
              call SendmailMsg(group, obj, eBody)
            end if            
        next
    end if
    
    if usersDlg.Users.Count > 0 then
        ' если выбрали хоть одного пользователя
        set selectedUsers = usersDlg.Users
        ' для каждого пользователя
        for each user in selectedUsers
            ' добавить этих пользователей
            eBody = ""
            call addRole(objRoles, user.SysName, eBody)
            if eBody <> "" then
              eBody = eBody + " пользователю "
              call SendMailMsg(user, obj, eBody)
            end if
        next
    end if
end sub

Function roleExists(objRoles, roleName, userName)
    dim role
    
    roleExists = False
    for each role in objRoles
        if role.User is nothing then
            roleExists = roleExists or ((role.RoleDef.SysName = roleName) and _
            (role.Group.SysName = userName))
        else
            roleExists = roleExists or ((role.RoleDef.SysName = roleName) and _
            (role.User.SysName = userName))
        end if
    next
End Function


Sub addRole(objRoles, userName, eBody)
    
    dim role, roleName, dsRole
    dim arr(), rearr
    dim slDlg
    dim slRoles, i
    
    set slRoles = ThisApplication.RoleDefs
    
    i = 0
    for each role in slRoles
      i = i + 1      
      ReDim Preserve arr(i)
      set arr(i) = role
    next
    set slDlg = ThisApplication.Dialogs.SelectDlg
    slDlg.SelectFrom = arr
    if slDlg.Show = False then
      Exit sub
    else
      rearr = slDlg.Objects
      if ubound(slDlg.Objects) = 0 then
        set role = rearr(0)
        roleName = role.sysname
        dsRole = role.Description  
      else if ubound(slDlg.Objects) > 0 then
        msgbox("выбрано слишком много ролей")
        Exit sub
      end if
      end if
    end if
    
    if not roleExists(objRoles, roleName, userName) then
        set role = objRoles.create(roleName, userName)
        eBody = "Назначена роль " & Chr(34) & dsRole & Chr(34)
    else MsgBox "Такая роль уже существует на объекте!", vbExclamation
    end if
    
End Sub

sub SendMailMsg(mList, mObj, eBody)

  dim objMail

  Set objMail = ThisApplication.CreateMessage
  ' Заполняем свойства сообщения
  objMail.Subject = "Назначение роли" 'тема сообщения
  eBody = eBody & Chr(34) & mList.Description & Chr(34) & " на объект " & Chr(34) & mObj.Description & Chr(34)
  objMail.Body = eBody 'тело письма
  objMail.To = mList 'кому отправляем
  objMail.Attachments.Add(mObj) 'прибиваем объект к письму, чтобы долго не искать потом что же за объект
  ' Отсылаем сообщение
  objMail.Send
end sub