Список форумов Акцент Акцент
официальный форум разработчика программы Акцент
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Проверка программно пользователя на наличие его к группе

 
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.0
Предыдущая тема :: Следующая тема  
Автор Сообщение
APOSTROFF



Зарегистрирован: 07.12.2005
Сообщения: 13

СообщениеДобавлено: Ср Дек 07, 2005 9:18 am    Заголовок сообщения: Проверка программно пользователя на наличие его к группе Ответить с цитатой

Здраствуйте ... Подскажите плллззз как проверить програмно или через T-SQL принадлежность текущего пользователя к групе скажем "Бухгалтера"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
taa



Зарегистрирован: 11.03.2005
Сообщения: 135

СообщениеДобавлено: Ср Дек 07, 2005 9:20 am    Заголовок сообщения: Re: Проверка программно пользователя на наличие его к группе Ответить с цитатой

APOSTROFF писал(а):
Здраствуйте ... Подскажите плллззз как проверить програмно или через T-SQL принадлежность текущего пользователя к групе скажем "Бухгалтера"

Прграммно - WorkArea.UserGroups, возвращает массив наименований групп, в которые входит текущий пользователь.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
APOSTROFF



Зарегистрирован: 07.12.2005
Сообщения: 13

СообщениеДобавлено: Ср Дек 07, 2005 10:03 am    Заголовок сообщения: Ответить с цитатой

Пасибо .. так просто ... Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Чт Мар 24, 2011 3:12 pm    Заголовок сообщения: Ответить с цитатой

Может я туп, но у меня этот массив упорно возвращает ВСЕ группы.
Запускаю под пользователем, имеющим админские права. Акцент 7.4.534
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Александр Омеленчук



Зарегистрирован: 05.02.2009
Сообщения: 39
Откуда: Донецк

СообщениеДобавлено: Чт Мар 24, 2011 4:50 pm    Заголовок сообщения: Если пользователь админ то да Ответить с цитатой

При работе WorkArea.UserGroups админ входит во все группы, для всех остальных пользователей все нормально работает
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Пт Мар 25, 2011 9:16 am    Заголовок сообщения: Re: Если пользователь админ то да Ответить с цитатой

Александр Омеленчук писал(а):
При работе WorkArea.UserGroups админ входит во все группы, для всех остальных пользователей все нормально работает

Странно, не правда ли?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Александр Омеленчук



Зарегистрирован: 05.02.2009
Сообщения: 39
Откуда: Донецк

СообщениеДобавлено: Пт Мар 25, 2011 10:04 am    Заголовок сообщения: немного да Ответить с цитатой

немного да, но я уже привык...
я ей пользуюсь часто.. пока не подводила
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Пт Мар 25, 2011 4:33 pm    Заголовок сообщения: Ответить с цитатой

Да задача тривиальна до ужаса: нужно продавцам на открытии Акцента запускать автоматически парочку отчетов. Понятное дело, что больше никому они не нужны и сам я уже задолбался каждый раз закрывать их. Буду писать хранимку, ибо привязываться к имени пользователя - большой грех.
Спасибо за объяснение. Это явная фича.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Александр Омеленчук



Зарегистрирован: 05.02.2009
Сообщения: 39
Откуда: Донецк

СообщениеДобавлено: Пт Мар 25, 2011 5:08 pm    Заголовок сообщения: зачем такие сложности Ответить с цитатой

зачем такие сложности

' Принадлежит ли пользователь группе
Function IsUserInGroup(grpName)
Dim i, grps
grps = WorkArea.UserGroups
For i=0 To UBound(grps)
If(UCase(grps(i)) = UCase(grpName))Then
IsUserInGroup = True
Exit Function
End If
Next
IsUserInGroup = False
End Function


против админа так

' Принадлежит ли пользователь группе
Function IsUserInGroup(grpName)
Dim i, grps
grps = WorkArea.UserGroups
For i=0 To UBound(grps)
If(UCase(grps(i)) = UCase(grpName) and UCase(grpName) <> ucase("admins"))Then
IsUserInGroup = True
Exit Function
End If
Next
IsUserInGroup = False
End Function
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Александр Омеленчук



Зарегистрирован: 05.02.2009
Сообщения: 39
Откуда: Донецк

СообщениеДобавлено: Пт Мар 25, 2011 5:09 pm    Заголовок сообщения: или так Ответить с цитатой

' Принадлежит ли пользователь группе
Function IsUserInGroup(grpName)
Dim i, grps
grps = WorkArea.UserGroups
For i=0 To UBound(grps)
If(UCase(grps(i)) = UCase(grpName) and UCase(WorkArea.DbUser) <> ucase("admin"))Then
IsUserInGroup = True
Exit Function
End If
Next
IsUserInGroup = False
End Function
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Пн Мар 28, 2011 9:13 am    Заголовок сообщения: Ответить с цитатой

Это, конечно, хорошо, но совершенно не правильно. Формально-то админ может и быть в проверяемой группе. Зачем же его оттуда так жестко выкидывать??? А вдруг у меня директор - параноик, админ и при этом продавец? И совершенно логично хочет видеть эти же отчеты на загрузке?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
fly



Зарегистрирован: 31.05.2005
Сообщения: 108

СообщениеДобавлено: Вт Мар 29, 2011 11:48 am    Заголовок сообщения: Ответить с цитатой

согласен с Женей. Часто встречаю пользователей в нескольких группах
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Вт Мар 29, 2011 12:32 pm    Заголовок сообщения: Ответить с цитатой

Если уж так, то готовое решение для будущих поколений:
Код:
ALTER procedure [dbo].[ins_user_getgroups]
@user_name nvarchar(50)
as
set nocount on

select   U.name, U2.name
from   sysusers U
      inner join sysmembers M on U.uid = M.memberuid
      inner join sysusers U2 on M.groupuid = U2.uid
where   U.name = @user_name
order by U2.name

Код:
Sub Workarea_QueryUI(ByRef Panels, ByRef Items, ByRef Tabs)
   Dim Arr
   Dim i
   Dim ShtBook
   Dim cmd
   Dim RS

   With Workarea
      .ADOConnection.CommandTimeOut = 1000
      Set .Map.Item("cnn") = .ADOConnection 'дополнительное соединение для собственных запросов
      .Map.Item("cnn").CommandTimeOut = 1000
      ' Запустим отчеты  для продавцов
      Set cmd = CreateObject("ADODB.Command")
      Set cmd.ActiveConnection = .Map("cnn")
      cmd.CommandTimeout = .Map.Item("cnn").CommandTimeOut
      cmd.CommandType = 4   'adCmdStoredProc
      cmd.CommandText = "ins_user_getgroups"
      SetParam cmd, "@user_name", 200, 1, 100, .DBUser
'      SetParam cmd, "@user_name", advarChar, adParamInput, 100, .DBUser
      Set RS = cmd.Execute
      If Not RS.EOF Then
         Arr = RS.GetRows
         For i=0 To UBound(Arr)
            If Arr(1,i) = "_Sales" Then
' тут собственно делаем что нам нужно
            End If
         Next
      End If
   End With
End Sub
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.0 Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group