1

ユーザーが作成したフォームエントリのみを編集できるようにし、管理者のみがテーブル/すべてのフォームを編集できるようにする簡単な方法はありますか? 例: スタッフ全員が自分のミーティングを追加および編集できるようにする必要がありますが、他のスタッフのミーティングを編集することはできません。

4

1 に答える 1

3

これは単純ではありません... Access にはあらゆる種類のセキュリティが組み込まれていました (そして今も組み込まれています) が、現在は廃止されているため、ユーザーがそうしたい場合、およびその方法を知っている場合は、フォームをバイパスできます。Access は実際には安全なプラットフォームではないため、セキュリティを構築しようとしても、不注意なエラーを防ぐだけで、中途半端な攻撃を防ぐことはできません。

とにかく、各ユーザーのユーザー ID を取得する必要があります (Access はそのままでは実行できません。この関数で実行できます)。

Private Declare PtrSafe Function WNetGetUser Lib "mpr.dll" Alias "WNetGetUserA" (lpName As Any, ByVal lpUserName As String, lpnLength As Long) As Long

Public Function WSUserName() As String         'Returns the workstation user name
    Dim Ret As Long, cbusername As Long, UserName As String
    UserName = Space(256)
    cbusername = Len(UserName)
    Ret = WNetGetUser(ByVal 0&, UserName, cbusername)
    If Ret = 0 Then
        UserName = Left(UserName, InStr(UserName, Chr(0)) - 1)
    Else
        UserName = ""
    End If
    WSUserName = UserName
End Function

Creating_User次に、これをテーブル/フォームのテキスト フィールドのデフォルト値として使用する必要があります。

tbl_Users少なくとも、ユーザーのフィールドとはい/いいえフィールドUserIDを含むテーブルが必要です。WSUserName()IsAdministrator

次に、フォームのForm_Currentイベント ハンドラーで、次のものが必要です。

Me.AllowEdits = DLookup("IsAdministrator", "tbl_Users", "UserID = " & WSUserName()) Or Me.Creating_User = WSUserName()
Me.AllowDeletions = DLookup("IsAdministrator", "tbl_Users", "UserID = " & WSUserName()) Or Me.Creating_User = WSUserName()

これにより、ユーザーは他のユーザーのレコードを編集/削除できなくなりますが、管理者は誰のレコードも編集/削除できます。誰でもレコードを追加できます。Creating_UserフィールドはデフォルトWSUserName()で読み取り専用である必要があるため、それら (または管理者) のみがレコードを操作できます。

この方法の唯一の問題は、PC が共有ログオンを持っていないことを前提としていることです。朝に PC にログオンし、誰でも立ち寄って使い始めることができる場合は、別のアプローチを使用する必要がありますが、この方法は、ユーザーが自分の ID でログインする PC ではうまく機能します。作業してからログオフすると、他の誰かがログインできるようになります。

于 2013-08-01T22:18:43.950 に答える