Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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, возвращает массив наименований групп, в которые входит текущий пользователь. |
|
Вернуться к началу |
|
 |
APOSTROFF
Зарегистрирован: 07.12.2005 Сообщения: 13
|
Добавлено: Ср Дек 07, 2005 10:03 am Заголовок сообщения: |
|
|
Пасибо .. так просто ...  |
|
Вернуться к началу |
|
 |
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
|
|
|
Вернуться к началу |
|
 |
|