Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA Access: разрешения для пользователя? (программно) / 17 сообщений из 17, страница 1 из 1
26.09.2003, 13:55
    #32276773
geo_life
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
Пытаюсь определить разрешения пользователя user_a на таблицу (или др. объект) table_b. Использую DAO -> Conteiners & Documents. Так вот свойство AllPermission возвращает константу которую я НИКАК не могу распознать. Подскажите как из этой костанты получить чтонить вразумительное. :?:
...
Рейтинг: 0 / 0
26.09.2003, 14:21
    #32276822
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
У меня все это есть на работе, но я до работы доеду только через три дня.
...
Рейтинг: 0 / 0
26.09.2003, 14:51
    #32276875
geo_life
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
ничего, я подожду. только не забудь, ладно!
...
Рейтинг: 0 / 0
26.09.2003, 15:17
    #32276903
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
Можешь послать мне напоминалочку. :^)

vladimir тушканчик comtec.co.il
...
Рейтинг: 0 / 0
26.09.2003, 15:31
    #32276931
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
С помощью оператора And выполните поразрядное сравнение для определения установленных разрешений.

Например для проверки возможности чтения данных

If (tbl.AllPermissions And dbSecRetrieveData = dbSecRetrieveData) Then
MsgBox "Пользователь " & tbl.UserName & " имеет разрешение на доступ к данным."

Констаннты найдете в Help
...
Рейтинг: 0 / 0
26.09.2003, 15:34
    #32276937
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
А вот и хелп

AllPermissions Property


Returns all the permissions that apply to the current UserName property of the Container or Document object, including permissions that are specific to the user as well as the permissions a user inherits from memberships in groups (Microsoft Jet workspaces only).

Return Values

For any Container or Document object, the return value is a Long value or constant(s) that may include the following.

Constant Description
dbSecReadDef The user can read the table definition, including column and index information.
dbSecWriteDef The user can modify or delete the table definition, including column and index information.
dbSecRetrieveData The user can retrieve data from the Document object.
dbSecInsertData The user can add records.
dbSecReplaceData The user can modify records.
dbSecDeleteData The user can delete records.


In addition, the Databases container or any Document object in a Documents collection may include the following.

Constant Description
dbSecDeleteData The user can delete records.
dbSecDBAdmin The user can replicate the database and change the database password.
dbSecDBCreate The user can create new databases. This setting is valid only on the Databases container in the workgroup information file (System.mdw).
dbSecDBExclusive The user has exclusive access to the database.
dbSecDBOpen The user can open the database.


Remarks

This property contrasts with the Permissions property, which returns only the permissions that are specific to the user and doesn't include any permissions that the user may also have as a member of groups. If the current value of the UserName property is a group, then the AllPermissions property returns the same values as the Permissions property.
...
Рейтинг: 0 / 0
26.09.2003, 16:16
    #32277037
geo_life
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
ок. в понедельник напишу.
...
Рейтинг: 0 / 0
26.09.2003, 16:25
    #32277049
geo_life
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
2 Serge Gavrilov
в коде -
Код: plaintext
If (tbl.AllPermissions And dbSecRetrieveData = dbSecRetrieveData) Then 

что будет выполняться первым And / = ?

А так
Код: plaintext
If (tbl.AllPermissions = dbSecRetrieveData) Then  

или
Код: plaintext
If (tbl.AllPermissions AND dbSecRetrieveData) Then  

можно.

2 (c)VIG - Thanks!
...
Рейтинг: 0 / 0
26.09.2003, 16:38
    #32277071
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
2 geo_life
Не за что.
Делай как у Serge Gavrilov ,у него правильно.
Вот пример из хелпа
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub CheckAllPermissions()
    Dim dbs As Database, ctr As Container

    ' Return reference to current database.
    Set dbs = CurrentDb
    ' Return reference to Forms container.
    Set ctr = dbs.Containers!Forms
    ' Check if AllPermissions property includes full access.
    If (ctr.AllPermissions And dbSecFullAccess = _
            dbSecFullAccess) Then
        MsgBox  "User "  & ctr.UserName _
            &  " has full access to all forms." 
    End If
    Set dbs = Nothing
End Sub
...
Рейтинг: 0 / 0
26.09.2003, 16:38
    #32277072
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
Первым будет выполняться =, а потом And.

А заключать в скобки полностью все, что между If...Then, нет смысла.
...
Рейтинг: 0 / 0
26.09.2003, 16:43
    #32277078
geo_life
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
зачем тогда '=' нужно?
...
Рейтинг: 0 / 0
26.09.2003, 16:46
    #32277082
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
Действительно не нужно. A=A дает True. А затем B And True дает B. Так что - баг-с!
...
Рейтинг: 0 / 0
26.09.2003, 17:42
    #32277153
(c)VIG
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
зря доверился хелпу
Нужны там скобки ,иначе бесcмыслица.
Правильно
Код: plaintext
1.
2.
3.
4.
if (ctr.AllPermissions And dbSecFullAccess) = dbSecFullAccess then
 true part
else
 false part
end if
...
Рейтинг: 0 / 0
26.09.2003, 17:52
    #32277174
geo_life
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
а вот это реально! и главное наглядно отражает проверку.
...
Рейтинг: 0 / 0
26.09.2003, 18:26
    #32277223
Serge Gavrilov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
Да, скобки я неправильно указал, хотя проверяя у себя в базе написал так как надо. Прошу прощения, что несколько ввел в заблуждение. Хотя слова были сказаны правильные, можно было догадаться
...
Рейтинг: 0 / 0
27.09.2003, 13:05
    #32277449
geo_life
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
получается что MSDN'кий пример - лажает.
...
Рейтинг: 0 / 0
29.09.2003, 15:14
    #32278416
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
VBA Access: разрешения для пользователя? (программно)
Итак, вот то, что я обещал. Функция написана не самым красивым образом, но она работает.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
Function HasRights(ObjectType As String, ObjectName As String, RightType As String) As Integer
'функция проверяет, есть ли у ТЕКУЩЕГО юзера определенное право на определенный объект'

'смысл параметров:'

'       ObjectType:         ObjectName:         RightType:'
'       tab - table                             or - open/run'
'       que - query                             rdes - read design'
'       for - form                              mdes - modify design'
'       rep - report                            adm - administer'
'       mod - module                            rd - read data'
'       mac - macro                             ud - update data'
'                                               id - insert data'
'                                               dd - delete data'
'                                               !d - update, insert & delete data'

    Dim rt As Long, i As Integer
    Dim dbX As Database, u As User, o As Document
    On Error GoTo Wrong

    'вычисление кода права:'
    Select Case ObjectType &  "-"  & RightType
        Case  "mac-rdes" ,  "mod-rdes" :                         rt =  2 
        Case  "tab-rdes" ,  "que-rdes" ,  "for-rdes" ,  "rep-rdes" : rt =  4 
        Case  "mac-or" :                                       rt =  8 
        Case  "tab-rd" ,  "que-rd" :                             rt =  16 
        Case  "tab-id" ,  "que-id" :                             rt =  32 
        Case  "tab-ud" ,  "que-ud" :                             rt =  64 
        Case  "tab-dd" ,  "que-dd" :                             rt =  128 
        Case  "tab-!d" ,  "que-!d" :                             rt =  128  +  64  +  32 
        Case  "for-or" ,  "rep-or" :                             rt =  256 
        Case  "mac-mdes" ,  "mod-mdes" :                         rt =  65536  +  4 
        Case  "tab-mdes" ,  "que-mdes" ,  "for-mdes" ,  "rep-mdes" : rt =  65536  +  8 
        Case  "tab-adm" ,  "que-adm" ,  "for-adm" ,  "rep-adm" ,  "mac-adm" ,  "mod-adm" 
                                                             rt =  852478 
        Case Else
            HasRights = False
            MsgBox  "ошибка во входных параметрах" 
            Exit Function
    End Select

    'доступ к объекту:'
    Set dbX = CurrentDb
    Select Case ObjectType
        Case  "for" :        Set o = dbX.Containers!Forms.Documents(ObjectName)
        Case  "mac" :        Set o = dbX.Containers!Scripts.Documents(ObjectName)
        Case  "mod" :        Set o = dbX.Containers!Modules.Documents(ObjectName)
        Case  "rep" :        Set o = dbX.Containers!Reports.Documents(ObjectName)
        Case  "tab" ,  "que" : Set o = dbX.Containers!Tables.Documents(ObjectName)
    End Select

    'проверка прав групп, к которым принадлежит юзер:'
    Set u = DBEngine( 0 ).Users(CurrentUser())
    For i =  0  To u.Groups.Count -  1 
        o.UserName = u.Groups(i).Name
        GoSub CheckRight
    Next

    'проверка прав самого юзера:'
    o.UserName = u.Name
    GoSub CheckRight

NotFound:
    'выход на случай, если прав нет:'
    HasRights = False
    Exit Function

Wrong:
    If Err =  3265  Then
        MsgBox  "объект не найден" 
    Else
        MsgBox Str$(Err) &  " - "  & Error(Err)
    End If
    Resume NotFound

CheckRight:
    If (o.Permissions And rt) <> rt Then Return
    HasRights = True
    Exit Function

End Function
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA Access: разрешения для пользователя? (программно) / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]