|
|
|
| Уважаемые, хочется разграничить права пользователей по каждой форме. Мне бы желательно примерчики или ссылочки на программы с примером.
При этом хотелось бы увидеть реализацию именно мандатного принципа контроля данных. С дискреционным принципом я немножко разобралась.
Спасибо | |
|
| |
|
|
|
| Офигеть!! Умница!!!
Алёнка, ну если ты разобралась с дискрискритицинионным, то уж с мандатным, видимо запросто разберёшься. | |
|
| |
|
|
|
| уважаемый Час, ну не смейся надо мной. Я же сказала, что почти разобралась. Почти - это значит, что только начала. Да и я к тому же перепутала. Это с мандатным я разобралась. Там вроде несложно.
А вот с дискреционным сложнее.
А могли бы вы мне вот с чем помочь. Вот файлик http://slil.ru/26178286 - это файл от одной книги. Если нужно, найду название.
Там реализован и тот и тот принцип. Вопрос в том, что он реализован по отношению к меню, появляющемуся в Надстройках. А мне хотелось бы, чтобы он применялся к главной форме.
Вот могли бы вы изменить файлик так, чтобы там права доступа у каждого сотрудника также распространялись и на обе вкладки и на все три кнопки формы MAINMENU? Эту форму я сама создала как пример. Она полностью пустая и без ссылок. Но ведь это и не надо для прав.
Спасибо большое!
Кстати, может файлик как пример кому-то пригодится. Если так, буду рада. | |
|
| |
|
|
|
| я так понимаю, что для формы нужно прописать код типа
If [Forms]![Login]![ComboBox].Column(19) = 0 Then
f.MainMenu.Controls("Вкладка1").Enabled = False
Else
f.MainMenu.Controls("Вкладка1").Enabled = True
End If
???????????????????? | |
|
| |
|
|
|
| А почему Вы решили, что я над Вами смеялся.
Нискольео....
Я же написал Молодец!!!! АЛЁНКА!!!!! | |
|
| |
|
|
|
| Хороший вопрос. Только я не понял, что значит "дискреционный", а что значит "мандатный". Можно пояснить? К моему стыду, не владею данной терминологией. Спасибо | |
|
| |
|
|
|
| Дискреционный метод управления доступом в Access реализуется через файл рабочей группы. С этим Вы разобрались. А вот мандатный принцип разграничения доступа в Access никак не поддерживается. Тут уж надо что-то разрабатывать самому. Но вот не задача, лично я этим не занимался. Если и приходилось делать разграниченный доступ, то применял то, что есть - защиту через файл рабочей группы. И думается мне, чтобы реализовать мандатный механизм контроля доступа, необходимо иметь хотя бы начальные знания из области защиты информации. Ведь надо где-то хранить метки безопасности, причём так, чтобы к ним не было доступа у посторонних. Это, наверное, будет основная задача, которую надо решить при реализации мандатного принципа. | |
|
| |
|
|
|
| Я вообще стараюсь всё делать в коде - кого куда пустить.
Так что про файл рабочей группы и тем паче его заморочки мне не знакомы - извините! | |
|
| |
|
|
|
| В том файлике, на который я дала ссылку, все сделано в коде.
Не могли бы ВЫ мне как пример сделать права на мою форму Mainmenu и на ее обе вкладки и три кнопки?
А я уже как пример использовала бы.
А???
спасибо огромное | |
|
| |
|
|
|
| и насчет файла рабочих групп. я тоже не люблю это. я люблю, когда все собрано в одном файле. а то файл рабочих групп всегда можно забыть, да и его надо переносить. в общем, морока сплошная. не для меня. | |
|
| |
|
|
|
| а насчет "смеялся" я ведь пошутила, уважаемый Час. Я сказала шутя. И кстати, Ваша ирония мне понравилась | |
|
| |
|
|
|
| а где же Ваша формочка?
а вот она красиво.
А какуя из них нужная?
mainmenu | |
|
| |
|
|
|
| да, моя формочка Mainmenu.
Она пустая. Ведь для прав это и не нужно. Факт в том, что кнопка или вкладка формы будет доступна или недоступна определенным пользователям.
Поэтому я создала обычную формочку, чтобы видеть, как Вы сделаете права на кнопки и вкладки на этой форме. А там я уже по образцу сделаю настоящую форму.
Спасибо Вам за помощь, Час. | |
|
| |
|
|
|
| Видимо Алён немного не так....извините.
Вы когда в форме логин делаете выбор, присвойте значение глобальной переменной
=0
или
=1
А когда в свою форму заходить будете(при загрузке своей формы)
тогда и скажете кому енаблед фалсе а кому труе.
If Login= 0 Then
и потом эту переменную во всех формах будете проверять и в зависимости от её значения разрешать или запрещать ......... | |
|
| |
|
|
|
| Public logins As Boolean
Private Sub ComboBox_AfterUpdate()
logins = Me.ComboBox.Column(19)
End Sub | |
|
| |
|
|
|
| Уважаемый Час, а могли бы Вы мне как примерчик показать? Я сама пробовала сделать, но не работает как нужно. То есть принцип как Вы и говорите, я использую. Но что-то я неправильно делаю. Не получается.
Можно? Я буду Вам очень благодарна. | |
|
| |
|
|
|
| я тогда всё вытащу в новый файлик - ладно? | |
|
| |
|
|
|
| Конечно, делайте как Вам удобно. А я буду сидеть, разбираться.
Все равно мне надо в этом вопросе разобраться, так как я и сама хочу уметь это делать.
Спасибо огромное! | |
|
| |
|
21 Кб. |
|
| вот посмотрите.
У волкова так а у петрова эдак | |
|
| |
|
|
|
| Спасибо огромное. Пойду смотреть. | |
|
| |
|
|
|
| Господа и дамы, позвольте внести коррективы.
Если признак права доступа хранить в переменной, то при какой-либо ошибке в коде, это переменная может очистится, и алгоритм доступа нарушится (из собственного опыта).
Вариант:
После проверки введенного логина и пароля в форме "Login", открыть форму, связанную с таблицей прав пользователей, в невидимом режиме, на записи текущего пользователя, и считывать значения прав доступа непосредственно из нее.
| |
|
| |
|
|
|
| уважаемый Lukas, а могли бы Вы показать на примерчике тоже?
Я сейчас этот вопрос изучаю везде, где только возможно. Кое чаво получается. И без Вашей помощи было бы гораздо СЛОЖНЕЕ.
Спасибо. | |
|
| |
|
|
|
| Кстати, уважаемый Час, у меня такой вопрос.
Получается, если я хочу сделать так, чтобы для каждого элемента, для которого я хочу установить наличие или отсутствие доступа, мне придется устанавливать для каждого элемента отдельную переменную типа той, которую сделали вы, а именно logins. Правильно?
Если же я этой с помощью одной переменной буду присваивать права нескольким, допустим, кнопкам, то и права я смогу устанавливать одновременно на все эти элементы, но не на каждый в отдельности.
| |
|
| |
|
|
|
| Переменная одна и она хранит в себе "права" пользователя.
Конечно если всё делать сурьёзно, то без таблицы пользователей и таблицы прав не обойтись, но для начала в Вашем варианте, где надо просто попробовать разобраться - переменная Вам поможет.
Хотя конечно тема обширная и это только первая ступенька.
А я посмотрел - как быстро ВЫ по лесенке побежали вверх - это радует | |
|
| |
|
|
|
|
>то при какой-либо ошибке в коде
| программа не должна допускать необработанных ошибок. | |
|
| |
|
|
|
|
| Насчет защиты от Шифта. Она установлена и работает.
Ясно, что Аксесс - это не та прога, которая предоставляет высокий уровень защиты в силу разных и прежде всего коммерческих обстоятельств, как мне кажется.
Да и у меня не стоит вопрос о защите приложения от подготовленных программистов. Да даже если бы и хотела, не смогла бы, так как уровень подготовки не тот.
Прога рассчитана на трех человек, среди которых даже нет ламеров, что уж говорить про программистов. И разграничение прав пользователей я делаю не для того, чтобы защитить что-то, а лишь для того, чтобы эти долбоебы (это я любя ) не лазили везде, в частности начальник. Ему вообще я открою только отчеты и пусть зырит .
Да, кстати, я со всем разобралась. Сделала как мандатный, так и дискреционный тип доступа. УРАААААААААААААААААА! Хотя мандатный мне и не нужен, но это я так, чиста поиграться. На будущее пригодится.
Огромная благодарность Часу.
Что касается замечания от Lukas, то я подумаю над вашим предложением. Я сделал все как Вы и сказала, чтобы считывать данные непосредственно из таблицы с помощью скрытой формы. Но теперь я думаю, нужно ли это мне и что лучше - переменная или непосредственно значение из таблицы. Просто у меня тоже никаких обработчиков ошибок нет. Да и откуда они, я ж не программистка и даже не учусь, просто балуюсь, потому что интересно и потому что нравится и потому что иногда в работе помогает .
Так что всех благодарю. Интересно, когда люди советуют. Всегда интересно анализировать.
Вот теперь пойду анализировать: переменные лучше или значения таблицы!
Кстати, если у кого есть доводы ЗА или ПРОТИВ, пишите, МНЕ ОЧЧЧЧЧЧЧЧЧЧЕНЬ ИНТЕРЕСНО!
Всем спасибо! Вы очень милые мальчики! Приятно с Вами было общаться. И есть. И будет | |
|
| |
|
|
|
| Добро пожаловать на Hiprog.com
если не ошибаюсь здесь почти все не программистки(ты)
| |
|
| |
|
|
|
| С удовольствием здесь останусь. Все или не все - не важно. Главное, люди хорошие.
Как говорится, программисткой (стом) можешь ты не быть, а быть хорошим постарайся . Всегда приятно общаться с приятными людьми. | |
|
| |
|
|
|
|
| Lukas - зря не скажет табличка лучше (надёжнее) пока из неё не сотрёшь принудительно - куда значение денеться, а переменная - она так "изменчива" так переменна и изменить может в самый неожиданный момент ........... | |
|
| |
|
|
|
| ну так никто не запрещает еще и подключить файл рабочих груп и у пользователей отобрать права на изменения этой таблички. А администратору (или еще какай то группе пользователей) дать права на правку.
Сделать 3 таблички:
1. Группы пользователей
2. Развязка: Пользователи - группы пользователей
3. Доступ групп к элементам формы
В первыми двуми я надеюсь понятно
В третьей таблице поля
1. Ключ
2. Группа пользователей
3. Имя формы
4. Элемент формы
5. Видимисть элемента
6. Доступ к элементу
7. Изменение (для полей)
Создать процедуру вызываемую на открытие формы и получающую на вход ее имя.
Пробегает по рекордсету из 3 таблицы и меняет соответствующие свойства на необходимые (если свойство Isnull, то его пропускаем)
Ну вроде так.
Сори, времени мало, так что реализовать пока некогда, может как нибудь позднее. А мож кто другой реализует алгоритм. | |
|
| |
|
|
|
| Кстати, идея, как мне кажется, неплохая. Правда не знаю, подходит мне или нет. Но я сейчас пробую все варианты - так лучше, и так проще понять всю эту бодягу с правами доступа. Я вот с утреца все переделала так, чтобы значение брать не из переменной, а непосредственно из таблицы. По Вашему совету. Насчет надежности - согласна. Таблица есть таблица и оттуда значения просто так не пропадают. С переменными не так надежно.
Кстати, с переменными и дольше ведь. Это я сначала определяю переменную в форме Логин, а потом в каждой форме еще и использую эту переменную. С помощью таблицы я сразу обращаюсь к таблице через скрытую форму и все. И меньше места, и вообще удобнее вроде.
Что касается предложенного алгоритма, то звучит неплохо. Вопрос в том, хватит ли мне уровня, чтобы его реализовать. Я пойду пробовать. Но если мне кто пришлет файлик, где это реализовано как образец, буду очень благодарна. по виду не так сложно. вроде бы. Осталось проверить другое: сложно ли это будет конкретно мне
Спасибо за советы и спасибо заранее, если кто пришлет примерчик с реализацией предложенного ГлазастымМышем.
Мальчики, я так с Вами программисткой стану. Блин, столько интересного. | |
|
| |
|
|
|
| Интересно, а насколько будет правильно, вместо глобальной переменной использовать свойство проекта?
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
|
Или есть подводные камни, которых я не знаю? | |
|
| |
|
|
|
| я в этом ничего не поняла правда. поэтому увы, но я даже в смятении, не знаю, что сказать | |
|
| |