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

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

2008年4月24日木曜日

ACLの付与(管理者権限)

今日は自分のDBに管理者を追加するLotusScript。
このサンプルは自DBのACLを操作するものなので、大したものではないが、
応用すると便利に使える。

DBに管理者エントリをつけ忘れた!あ、でもLocalDomainServersは管理者権限を持っているぞ!
という時に役立つ。
(開発環境でテストDBを作成して、ACLそのままで本番サーバにDBをコピーしてしまったときとか。
筆者も何度か経験している・・・)

サーバ上のDBに下記の内容でスケジュールエージェントを作成して、サーバIDで署名するだけ。
これで、目当てのDBに管理者エントリを追加できるのである。

もっとも、フルアドミニストレータという機能が付いた6.x以降のバージョンでは
使う必要はないと思うが・・・R5以前のサーバを使っているなら十分に役立つと思う。

Sub Click(Source As Button)
 Dim session As New NotesSession
 Dim db As NotesDatabase
 Dim acl As NotesACL
 Dim entry As NotesACLEntry
 Dim namae As NotesName
 
 Dim tmp As String
 Dim errflg As Integer
 
 '自DBのACLを取得する
 Set db = session.CurrentDatabase
 Set acl = db.ACL
 
 'ユーザー/グループ名の入力
 tmp = Inputbox( "ACLを付与したいユーザー名/グループ名を入力して下さい。" + Chr$(10)_
 + "例)Ichirou Nihon/Notes", "ACLの付与", "" )
 If tmp = "" Then
  Messagebox "ユーザー名/グループ名が入力されていません。処理を中断します。", 0, "ACLの付与"
  Exit Sub
 End If
 errflg = 0
 
 '全ACLエントリの取得
 Set entry = acl.GetFirstEntry
 Do While Not entry Is Nothing
  Set namae = New NotesName( entry.Name )
  '入力された名前がすでにACLエントリに存在すれば、エラーとする
  If Strconv( namae.Abbreviated, 1 ) = Strconv( tmp, 1 ) Then
   errflg = 1
   Exit Do
  End If
  Set entry = acl.GetNextEntry( entry )
 Loop
 
 'エラーフラグが1になっていればエラーと見なしてメッセージ表示後処理中断
 If errflg = 1 Then
  Messagebox "その名前はすでにACLが付与されています。", 0, "ACLの付与"
  Exit Sub
 Else
  '管理者レベルでACLを付与する
  Call db.GrantAccess( tmp, 6 )
  Messagebox tmp + "を管理者でACLに追加しました。", 0, "ACLの付与"
 End If
End Sub

0 件のコメント: