MS Access 2007 - идентификация пользователей и на основании этого ограничение доступа к данным - PullRequest
0 голосов
/ 13 января 2010

Учитывая настройку:

  • Приложение доступа Ms, разделенное на интерфейс и бэкэнд = оба нативных MS Access
  • Front End состоит только из форм - это будет единственный способ доступа к данным
  • Передняя копия распространяется на каждый пользовательский компьютер (спасибо за ответы на этот вопрос )

Мне нужно реализовать следующий сценарий:

  • Приложение Ms Access с <20 пользователями, </li>
  • каждому пользователю назначено от 1 до 10 проектов,
  • когда пользователь открывает MS Access, ему должны быть представлены только те данные, которые относятся к проекту (-ам), которым он назначен

Например, у нас есть пользователи:

  • Джон
  • Owen

Джон назначен на проекты A, B, D. Оуэн Б, Д

Когда Джон входит в систему, он может видеть только данные связанные с проектами A, B, D. Когда Оуэн в логах он может видеть только B, D

Джон и Оуэн могут получить доступ к приложению одновременно

Связанные таблицы в серверной части

  • Пользователь
  • Проект
  • userProject - связывает пользователей с проектами во многих отношениях. Каждый пользователь может быть назначен одному или нескольким проектам, один или несколько пользователей могут работать над проектом.

Я натолкнулся на это решение на databasedev.co.uk, которое в основном использует скрытую форму для хранения сведений о текущих пользователях, а затем использует ее для фильтрации данных в других формах.

Так вот мой вопрос:

Это будет рекомендуемое решение? Есть ли лучшие варианты? Я думал, что мог бы использовать таблицу во внешнем интерфейсе вместо скрытой формы, например.

Ответы [ 3 ]

1 голос
/ 13 января 2010

У меня похожая, хотя и несколько более сложная ситуация. В моем случае, пользователи назначаются в группы пользователей, которые имеют различные разрешения для объектов доступа (форм, отчетов и т. Д.). У них также есть проекты, которым они назначены, и настройки. Таблицы:

user

user_group

user_pref

project

user_project

Однако я все еще использую скрытую форму (session), которая содержит информацию о сеансе пользователя, который в данный момент вошел в систему. Например: user_id, user_name, подчиненная форма назначенных проектов, предпочтения (например, «Текущий проект»).

Наконец, модуль basSession содержит все необходимые мне функции для get или set любой информации о сеансе в скрытой форме, например, gfSession_GetUserID().

НТН

1 голос
/ 13 января 2010

Редактировать комментарий
Я не вижу причин, по которым вам не следует поддерживать таблицу пользователей в бэк-энде с таблицей соединений пользователя, проекта, который можно использовать для фильтрации проектов.

Текущий пользователь может быть получен с помощью кода, если вы используете имя сети (http://www.mvps.org/access/api/api0008.htm),, его можно сохранить в скрытом поле в форме, что будет полезно для настройки формы для соответствующих проектовили вы можете сохранить имя в пользовательском свойстве базы данных (http://wiki.lessthandot.com/index.php/Custom_Database_Properties_Creation_and_Use)

Приведенный ниже код применяется для определения количества вошедших в систему пользователей.

Вы можете использовать ADO для конкретного поставщикаСхемы. Вам необходимо передать действительное соединение, например:

  ADOUserList Currentproject.Connection


  Public Sub ADOUserList(oConn As ADODB.Connection)
  Dim rs As ADODB.Recordset
      Set rs = oConn.OpenSchema(adSchemaProviderSpecific, , "{947bb102-5d43-11d1-bdbf-00c04fb92675}")
      Debug.Print rs.GetString
      rs.Close
  End Sub

Дополнительная информация: http://msdn.microsoft.com/en-us/library/aa155436.aspx

0 голосов
/ 13 января 2010

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

Если вы хотите перейти в Access, я бы предложил вам создать запросы для всех (важных) таблиц и использовать эти запросы в формах. Включите в запрос оператор WHERE, который ограничивает вывод тем, что может просматривать пользователь. Это можно сделать, либо изменив полный SQL-запрос при открытии базы данных, либо включив глобальную переменную в часть запроса WHERE и установив для этой переменной текущий идентификатор пользователя.

...