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

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

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

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

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

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
VBA Access: разрешения для пользователя? (программно)
    #32277037
Фотография geo_life
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок. в понедельник напишу.
...
Рейтинг: 0 / 0
VBA Access: разрешения для пользователя? (программно)
    #32277049
Фотография geo_life
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
VBA Access: разрешения для пользователя? (программно)
    #32277071
(c)VIG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
VBA Access: разрешения для пользователя? (программно)
    #32277072
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Первым будет выполняться =, а потом And.

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

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


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