VBA Access: разрешения для пользователя? (программно)

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
geo_life
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 06.05.2003 (Вт) 9:30
Откуда: Воронеж

VBA Access: разрешения для пользователя? (программно)

Сообщение geo_life » 26.09.2003 (Пт) 12:53

Пытаюсь определить разрешения пользователя user_a на таблицу (или др. объект) table_b. Использую DAO -> Conteiners & Documents. Так вот свойство AllPermission возвращает константу которую я НИКАК не могу распознать. Подскажите как из этой костанты получить чтонить вразумительное. :?:

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 26.09.2003 (Пт) 13:13

Никогда не пользовался этой фичей... Но вот что написано в МСДН:



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.

geo_life
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 06.05.2003 (Вт) 9:30
Откуда: Воронеж

Сообщение geo_life » 26.09.2003 (Пт) 13:45

Спасибо. MSDN я уже немного почитал. Дело в том что константа возвращается в числовом виде - 1048535, а не в текстовом как хотеось бы. Причем, как я понял, эта цифирь - сумма всех констант-разрешений у данного пользователя. И как её расшифровать я просто не понимаю.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 26.09.2003 (Пт) 14:22

Ну нифига себе :shock: А как ты ее себе представляешь в текстовом виде? "Вася Пупкин может писать сюда"? :lol:

Флаги анализируются примерно так:

Код: Выделить всё
if allpermissions and dbSecInsertData then .....

geo_life
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 06.05.2003 (Вт) 9:30
Откуда: Воронеж

Сообщение geo_life » 26.09.2003 (Пт) 14:49

ни фига себе я лоханулся. Всюэту шнягу я пытался проверить так
Код: Выделить всё
if allpermissions = dbSecInsertData then .....

а надо значит так

if allpermissions and dbSecInsertData then ...


Но непонятно вот что (заранее извиняюсь за дурацкий вопрос), ведь allpermissions - число и dbSecInsertData - тоже, тогда как происходит проверка?

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 26.09.2003 (Пт) 14:58

В общем, каждое число это последовательность битов, имеющих значения 0 или 1 :)

Флаг (в нашем случае dbSecInsertData) это обычно число имеющее все нулевые биты, кроме одного. В нашем случае это будет бит номер 5. Так вот, в AllPermissions пятый бит будет равен 1 только если флаг dbSecInsertData установлен. Этот факт мы и проверяем с помощью операции AND.

geo_life
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 06.05.2003 (Вт) 9:30
Откуда: Воронеж

Сообщение geo_life » 26.09.2003 (Пт) 15:12

ОГРОМНЫЙ THANKS !!!! - :D
Это - "То, что доктор прописал"

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.09.2003 (Пт) 16:48

Правильнее все-таки
Код: Выделить всё
If AllPermissions and dbSecInsertData = dbSecInsertData Then ...
Lasciate ogni speranza, voi ch'entrate.

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 26.09.2003 (Пт) 17:03

Ну.. как мы помним все, что не 0 это True.... :) И как то раз помнится было тут жуть бурное обсуждение того, как же лучше писать...... :roll:

geo_life
Начинающий
Начинающий
 
Сообщения: 12
Зарегистрирован: 06.05.2003 (Вт) 9:30
Откуда: Воронеж

Сообщение geo_life » 27.09.2003 (Сб) 11:57

Здается мне что сначало в выражении А and B = B должно выполниться = , далее: A and TRUE -> A т.е. не 0 , а значит TRUE. Что то вроде фигня какя-то.
Может просо написать
Код: Выделить всё
if A and B then ...

& thats all folks!


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 211

    TopList  
cron