当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2008年4月22日火曜日

データベースのACLを取得する

NotesDBのACLを取得する方法。
ACLエントリを取得するだけなら大したことはない(NotesDatabaseクラスのACLプロパティ)が、
それぞれのエントリのアクセス権を取得するところまでとなると少々面倒。
アクセス権は戻り値が数値なので、分かりやすく日本語名称に変換している。

Sub Click(Source As Button)
 'データベースの変数の定義
 Dim session As New NotesSession
 Dim db As NotesDatabase
 Dim acl As NotesACL
 Dim entry As NotesACLEntry
 
 'ACLの名前とレベルの格納用変数の定義
 Dim namae As String
 Dim level As String
 
 '作業用変数の定義
 Dim sbj As String
 Dim i As Integer
 
 '自分のDBとACLをセット
 Set db = session.CurrentDatabase
 Set acl = db.ACL
 
 i =0
 Set entry = acl.GetFirstEntry
 'ACLはDB中にいくつセットされているか分からないので、Do Whileループでentryがなくなるまで繰り返す
 Do While Not (entry Is Nothing )
  i = i + 1
  
  namae = entry.Name
  'ChgEntryLevelは自作関数(entry.Levelは数字で返すのでテキストに変換)
  level = ChgEntryLevel( entry.Level )
  sbj = sbj & Cstr( i ) & "." & namae & " , " & level & Chr$(10)
  
  '次のACLエントリーを取得する
  Set entry = acl.GetNextEntry( entry )
 Loop
 Messagebox sbj, 0, "DBのACL"
End Sub

Function ChgEntryLevel( level As Integer ) As String
 'ACLのレベルは0~6の7段階
 Select Case level
 Case 0:
  ChgEntryLevel = "[なし]"
 Case 1:
  ChgEntryLevel = "[投稿者]"
 Case 2:
  ChgEntryLevel = "[読者]"
 Case 3:
  ChgEntryLevel = "[作成者]"
 Case 4:
  ChgEntryLevel = "[編集者]"
 Case 5:
  ChgEntryLevel = "[設計者]"
 Case 6:
  ChgEntryLevel = "[管理者]"
 End Select
End Function 

0 件のコメント: