Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Разграничение прав
 
 автор: Аленка   (24.09.2008 в 17:20)   личное сообщение
 
 

Уважаемые, хочется разграничить права пользователей по каждой форме. Мне бы желательно примерчики или ссылочки на программы с примером.
При этом хотелось бы увидеть реализацию именно мандатного принципа контроля данных. С дискреционным принципом я немножко разобралась.
Спасибо

  Ответить  
 
 автор: час   (25.09.2008 в 10:42)   личное сообщение
 
 

Офигеть!! Умница!!!
Алёнка, ну если ты разобралась с дискрискритицинионным, то уж с мандатным, видимо запросто разберёшься.

  Ответить  
 
 автор: Аленка   (25.09.2008 в 14:23)   личное сообщение
 
 

уважаемый Час, ну не смейся надо мной. Я же сказала, что почти разобралась. Почти - это значит, что только начала. Да и я к тому же перепутала. Это с мандатным я разобралась. Там вроде несложно.
А вот с дискреционным сложнее.
А могли бы вы мне вот с чем помочь. Вот файлик http://slil.ru/26178286 - это файл от одной книги. Если нужно, найду название.
Там реализован и тот и тот принцип. Вопрос в том, что он реализован по отношению к меню, появляющемуся в Надстройках. А мне хотелось бы, чтобы он применялся к главной форме.

Вот могли бы вы изменить файлик так, чтобы там права доступа у каждого сотрудника также распространялись и на обе вкладки и на все три кнопки формы MAINMENU? Эту форму я сама создала как пример. Она полностью пустая и без ссылок. Но ведь это и не надо для прав.
Спасибо большое!

Кстати, может файлик как пример кому-то пригодится. Если так, буду рада.

  Ответить  
 
 автор: Аленка   (25.09.2008 в 14:36)   личное сообщение
 
 

я так понимаю, что для формы нужно прописать код типа
If [Forms]![Login]![ComboBox].Column(19) = 0 Then
f.MainMenu.Controls("Вкладка1").Enabled = False
Else
f.MainMenu.Controls("Вкладка1").Enabled = True
End If
????????????????????

  Ответить  
 
 автор: час   (25.09.2008 в 19:56)   личное сообщение
 
 

А почему Вы решили, что я над Вами смеялся.
Нискольео....
Я же написал Молодец!!!! АЛЁНКА!!!!!

  Ответить  
 
 автор: Denis V.   (25.09.2008 в 11:22)   личное сообщение
 
 

Хороший вопрос. Только я не понял, что значит "дискреционный", а что значит "мандатный". Можно пояснить? К моему стыду, не владею данной терминологией. Спасибо

  Ответить  
 
 автор: Denis V.   (25.09.2008 в 14:06)   личное сообщение
 
 

Дискреционный метод управления доступом в Access реализуется через файл рабочей группы. С этим Вы разобрались. А вот мандатный принцип разграничения доступа в Access никак не поддерживается. Тут уж надо что-то разрабатывать самому. Но вот не задача, лично я этим не занимался. Если и приходилось делать разграниченный доступ, то применял то, что есть - защиту через файл рабочей группы. И думается мне, чтобы реализовать мандатный механизм контроля доступа, необходимо иметь хотя бы начальные знания из области защиты информации. Ведь надо где-то хранить метки безопасности, причём так, чтобы к ним не было доступа у посторонних. Это, наверное, будет основная задача, которую надо решить при реализации мандатного принципа.

  Ответить  
 
 автор: час   (25.09.2008 в 19:59)   личное сообщение
 
 

Я вообще стараюсь всё делать в коде - кого куда пустить.
Так что про файл рабочей группы и тем паче его заморочки мне не знакомы - извините!

  Ответить  
 
 автор: Аленка   (25.09.2008 в 20:01)   личное сообщение
 
 

В том файлике, на который я дала ссылку, все сделано в коде.
Не могли бы ВЫ мне как пример сделать права на мою форму Mainmenu и на ее обе вкладки и три кнопки?
А я уже как пример использовала бы.
А???
спасибо огромное

  Ответить  
 
 автор: Аленка   (25.09.2008 в 20:05)   личное сообщение
 
 

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

  Ответить  
 
 автор: Аленка   (25.09.2008 в 20:03)   личное сообщение
 
 

а насчет "смеялся" я ведь пошутила, уважаемый Час. Я сказала шутя. И кстати, Ваша ирония мне понравилась

  Ответить  
 
 автор: час   (25.09.2008 в 20:32)   личное сообщение
 
 

а где же Ваша формочка?
а вот она красиво.
А какуя из них нужная?
mainmenu

  Ответить  
 
 автор: Аленка   (25.09.2008 в 20:42)   личное сообщение
 
 

да, моя формочка Mainmenu.
Она пустая. Ведь для прав это и не нужно. Факт в том, что кнопка или вкладка формы будет доступна или недоступна определенным пользователям.
Поэтому я создала обычную формочку, чтобы видеть, как Вы сделаете права на кнопки и вкладки на этой форме. А там я уже по образцу сделаю настоящую форму.
Спасибо Вам за помощь, Час.

  Ответить  
 
 автор: час   (25.09.2008 в 20:44)   личное сообщение
 
 

Видимо Алён немного не так....извините.
Вы когда в форме логин делаете выбор, присвойте значение глобальной переменной
=0
или
=1
А когда в свою форму заходить будете(при загрузке своей формы)
тогда и скажете кому енаблед фалсе а кому труе.

If Login= 0 Then

и потом эту переменную во всех формах будете проверять и в зависимости от её значения разрешать или запрещать .........

  Ответить  
 
 автор: час   (25.09.2008 в 20:52)   личное сообщение
 
 

Public logins As Boolean

Private Sub ComboBox_AfterUpdate()
logins = Me.ComboBox.Column(19)
End Sub

  Ответить  
 
 автор: Аленка   (25.09.2008 в 20:53)   личное сообщение
 
 

Уважаемый Час, а могли бы Вы мне как примерчик показать? Я сама пробовала сделать, но не работает как нужно. То есть принцип как Вы и говорите, я использую. Но что-то я неправильно делаю. Не получается.
Можно? Я буду Вам очень благодарна.

  Ответить  
 
 автор: час   (25.09.2008 в 20:54)   личное сообщение
 
 

я тогда всё вытащу в новый файлик - ладно?

  Ответить  
 
 автор: Аленка   (25.09.2008 в 20:57)   личное сообщение
 
 

Конечно, делайте как Вам удобно. А я буду сидеть, разбираться.
Все равно мне надо в этом вопросе разобраться, так как я и сама хочу уметь это делать.
Спасибо огромное!

  Ответить  
 
 автор: час   (25.09.2008 в 21:07)   личное сообщение
21 Кб.
 
 

вот посмотрите.
У волкова так а у петрова эдак

  Ответить  
 
 автор: Аленка   (25.09.2008 в 21:09)   личное сообщение
 
 

Спасибо огромное. Пойду смотреть.

  Ответить  
 
 автор: Lukas   (25.09.2008 в 21:25)   личное сообщение
 
 

Господа и дамы, позвольте внести коррективы.
Если признак права доступа хранить в переменной, то при какой-либо ошибке в коде, это переменная может очистится, и алгоритм доступа нарушится (из собственного опыта).
Вариант:
После проверки введенного логина и пароля в форме "Login", открыть форму, связанную с таблицей прав пользователей, в невидимом режиме, на записи текущего пользователя, и считывать значения прав доступа непосредственно из нее.

  Ответить  
 
 автор: Аленка   (25.09.2008 в 21:47)   личное сообщение
 
 

уважаемый Lukas, а могли бы Вы показать на примерчике тоже?
Я сейчас этот вопрос изучаю везде, где только возможно. Кое чаво получается. И без Вашей помощи было бы гораздо СЛОЖНЕЕ.
Спасибо.

  Ответить  
 
 автор: Аленка   (25.09.2008 в 22:13)   личное сообщение
 
 

Кстати, уважаемый Час, у меня такой вопрос.
Получается, если я хочу сделать так, чтобы для каждого элемента, для которого я хочу установить наличие или отсутствие доступа, мне придется устанавливать для каждого элемента отдельную переменную типа той, которую сделали вы, а именно logins. Правильно?
Если же я этой с помощью одной переменной буду присваивать права нескольким, допустим, кнопкам, то и права я смогу устанавливать одновременно на все эти элементы, но не на каждый в отдельности.

  Ответить  
 
 автор: час   (26.09.2008 в 07:45)   личное сообщение
 
 

Переменная одна и она хранит в себе "права" пользователя.
Конечно если всё делать сурьёзно, то без таблицы пользователей и таблицы прав не обойтись, но для начала в Вашем варианте, где надо просто попробовать разобраться - переменная Вам поможет.
Хотя конечно тема обширная и это только первая ступенька.
А я посмотрел - как быстро ВЫ по лесенке побежали вверх - это радует

  Ответить  
 
 автор: Bellerofont   (25.09.2008 в 22:53)   личное сообщение
 
 


>то при какой-либо ошибке в коде
программа не должна допускать необработанных ошибок.

  Ответить  
 
 автор: Lukas   (25.09.2008 в 23:26)   личное сообщение
23 Кб.
 
 

Я бы сказал более сурово:
Программист не должен допускать ...
Это зависит во многом от уровня подготовки.
Мое первое "творение" отработало уже 6 лет, не имея ни одного обработчика ошибок, просто я не знал тогда что это такое. Да и сейчас не особенно силен.

Вот мой краткий примерчик.
Защита от Shift не установлена.

  Ответить  
 
 автор: Аленка   (26.09.2008 в 00:24)   личное сообщение
 
 

Насчет защиты от Шифта. Она установлена и работает.
Ясно, что Аксесс - это не та прога, которая предоставляет высокий уровень защиты в силу разных и прежде всего коммерческих обстоятельств, как мне кажется.
Да и у меня не стоит вопрос о защите приложения от подготовленных программистов. Да даже если бы и хотела, не смогла бы, так как уровень подготовки не тот.
Прога рассчитана на трех человек, среди которых даже нет ламеров, что уж говорить про программистов. И разграничение прав пользователей я делаю не для того, чтобы защитить что-то, а лишь для того, чтобы эти долбоебы (это я любя ) не лазили везде, в частности начальник. Ему вообще я открою только отчеты и пусть зырит .

Да, кстати, я со всем разобралась. Сделала как мандатный, так и дискреционный тип доступа. УРАААААААААААААААААА! Хотя мандатный мне и не нужен, но это я так, чиста поиграться. На будущее пригодится.
Огромная благодарность Часу.
Что касается замечания от Lukas, то я подумаю над вашим предложением. Я сделал все как Вы и сказала, чтобы считывать данные непосредственно из таблицы с помощью скрытой формы. Но теперь я думаю, нужно ли это мне и что лучше - переменная или непосредственно значение из таблицы. Просто у меня тоже никаких обработчиков ошибок нет. Да и откуда они, я ж не программистка и даже не учусь, просто балуюсь, потому что интересно и потому что нравится и потому что иногда в работе помогает .

Так что всех благодарю. Интересно, когда люди советуют. Всегда интересно анализировать.
Вот теперь пойду анализировать: переменные лучше или значения таблицы!
Кстати, если у кого есть доводы ЗА или ПРОТИВ, пишите, МНЕ ОЧЧЧЧЧЧЧЧЧЧЕНЬ ИНТЕРЕСНО!

Всем спасибо! Вы очень милые мальчики! Приятно с Вами было общаться. И есть. И будет

  Ответить  
 
 автор: pasat   (26.09.2008 в 00:30)   личное сообщение
 
 

Добро пожаловать на Hiprog.com
если не ошибаюсь здесь почти все не программистки(ты)

  Ответить  
 
 автор: Аленка   (26.09.2008 в 00:42)   личное сообщение
 
 

С удовольствием здесь останусь. Все или не все - не важно. Главное, люди хорошие.
Как говорится, программисткой (стом) можешь ты не быть, а быть хорошим постарайся . Всегда приятно общаться с приятными людьми.

  Ответить  
 
 автор: Pasat   (26.09.2008 в 00:47)   личное сообщение
 
 

Если что, здесь есть еще болталка.
Разговоры обо всем...



зы
Как недавно сказал один хороший человек (один из постоянных member-oв hiprog-a)
главное - вовремя выйти из рекурсивного алгоритма

  Ответить  
 
 автор: час   (26.09.2008 в 07:53)   личное сообщение
 
 

Lukas - зря не скажет табличка лучше (надёжнее) пока из неё не сотрёшь принудительно - куда значение денеться, а переменная - она так "изменчива" так переменна и изменить может в самый неожиданный момент ...........

  Ответить  
 
 автор: ГлазастыйМышь   (26.09.2008 в 08:31)   личное сообщение
 
 

ну так никто не запрещает еще и подключить файл рабочих груп и у пользователей отобрать права на изменения этой таблички. А администратору (или еще какай то группе пользователей) дать права на правку.
Сделать 3 таблички:
1. Группы пользователей
2. Развязка: Пользователи - группы пользователей
3. Доступ групп к элементам формы

В первыми двуми я надеюсь понятно
В третьей таблице поля
1. Ключ
2. Группа пользователей
3. Имя формы
4. Элемент формы
5. Видимисть элемента
6. Доступ к элементу
7. Изменение (для полей)

Создать процедуру вызываемую на открытие формы и получающую на вход ее имя.
Пробегает по рекордсету из 3 таблицы и меняет соответствующие свойства на необходимые (если свойство Isnull, то его пропускаем)

Ну вроде так.
Сори, времени мало, так что реализовать пока некогда, может как нибудь позднее. А мож кто другой реализует алгоритм.

  Ответить  
 
 автор: Аленка   (26.09.2008 в 08:48)   личное сообщение
 
 

Кстати, идея, как мне кажется, неплохая. Правда не знаю, подходит мне или нет. Но я сейчас пробую все варианты - так лучше, и так проще понять всю эту бодягу с правами доступа. Я вот с утреца все переделала так, чтобы значение брать не из переменной, а непосредственно из таблицы. По Вашему совету. Насчет надежности - согласна. Таблица есть таблица и оттуда значения просто так не пропадают. С переменными не так надежно.
Кстати, с переменными и дольше ведь. Это я сначала определяю переменную в форме Логин, а потом в каждой форме еще и использую эту переменную. С помощью таблицы я сразу обращаюсь к таблице через скрытую форму и все. И меньше места, и вообще удобнее вроде.

Что касается предложенного алгоритма, то звучит неплохо. Вопрос в том, хватит ли мне уровня, чтобы его реализовать. Я пойду пробовать. Но если мне кто пришлет файлик, где это реализовано как образец, буду очень благодарна. по виду не так сложно. вроде бы. Осталось проверить другое: сложно ли это будет конкретно мне

Спасибо за советы и спасибо заранее, если кто пришлет примерчик с реализацией предложенного ГлазастымМышем.
Мальчики, я так с Вами программисткой стану. Блин, столько интересного.

  Ответить  
 
 автор: Lukas   (26.09.2008 в 19:47)   личное сообщение
 
 

Интересно, а насколько будет правильно, вместо глобальной переменной использовать свойство проекта?


Const myPropName As String = "myProperty"

Public Sub AddMyProp(myPropValue) ' одноразового применения
    CurrentProject.Properties.Add myPropName, myPropValue
End Sub

Public Function funWritePropValue(myPropValue)
    CurrentProject.Properties(myPropName) = myPropValue
End Function

Public Function funReadPropValue()
    funReadPropValue = CurrentProject.Properties(myPropName)
End Function

Или есть подводные камни, которых я не знаю?

  Ответить  
 
 автор: Аленка   (26.09.2008 в 22:24)   личное сообщение
 
 

я в этом ничего не поняла правда. поэтому увы, но я даже в смятении, не знаю, что сказать

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList