[Notes/Domino] NotesACL.DeleteRole のおかしな挙動
NotesACL クラスの DeleteRole を実行すると、ロールを削除することができますが、ある条件によっては、違うロールが(見た目上)有効化されてしまうことがあるようです。
【再現手順】
1. ACL でロール [A]、[B]、[C] を作成します。
2. エントリのロール [A]、[B] を有効化します。([C] は有効化しない。)
3. NotesACL.DeleteRole("B") を実行します。
Dim ss As New NotesSession Dim db As NotesDatabase Dim acl As NotesACL Set db = ss.CurrentDatabase Set acl = db.ACL Call acl.DeleteRole("B") Call acl.Save()
4-1. ACL を表示すると、なぜか [C] ロールが有効化されています。
4-2. しかし、「グループとロール」ダイアログを表示すると、有効化されているのは [A] ロールだけです。
4-3. 以下のコードでエントリのロールを取得しても、[A] ロールのみ返ります。
Dim ss As New NotesSession Dim db As NotesDatabase Dim acl As NotesACL Dim entry As NotesACLEntry Set db = ss.CurrentDatabase Set acl = db.ACL Set entry = acl.GetEntry("takenoff/takenoff") Msgbox Join(entry.Roles, ",")
5. じゃあ、ということで、以下のコードでもう [B] ロールを追加すると……
Dim ss As New NotesSession Dim db As NotesDatabase Dim acl As NotesACL Set db = ss.CurrentDatabase Set acl = db.ACL Call acl.AddRole("B") Call acl.Save()
6. エントリに [B] ロールが復活しました 😯
以上のことから、NotesACL.DeleteRole は、個々のエントリのロール情報までは変更していないことが解るかと思います。
これは NotesACL.DeleteRole のバグで、R7.0.3 で修正されているようです。
R7.0.3より低いバージョンでは、DeleteRole の前に全エントリの対象ロールを無効化する処理を入れるしかないですかね……○| ̄|_
コメント
takenoffさん
ちょっと上記の件と異なるんですけど、教えてもらいたい件があります。
Domino Administratorを使って、複数のDBを選択し、ACLの変更(エントリAからBへ)を行った場合、元のエントリAについているRoleが外れてしまいます。
これってどうにかならないものなのでしょうか。
ちなみにAdministratorは7.0.2です。
Posted at 2010/05/07 5:22 PM by pei
peiくんこんばんは。
GWフル出社のtakenoffです 😥
R6.0.4で動作を確認してみたけど、ログを見ると、
どーも「名前変更」と称しつつ、エントリの削除→追加という
タコな処理になっているようで、無理っぽいですな。
ロールを残す設定も無いようだし。
本当にユーザーID(or グループ名)が変わるのであれば、
名前変更のシステム管理要求を発行するのがよいと思うけど、
そういうのじゃないんだよね?
そうじゃなければ、スクリプトで書き換えるくらいしか思いつかんなぁ。
そんなに難しい処理でもないから、開発者に頼んで、Catalog DB にでも
機能を追加してもらったら?
Posted at 2010/05/08 2:27 AM by takenoff
Takenoffさん
ありがとうございます。
やはり、無理でしたか。
しかし、追加、削除のコンボだったとは・・・。Notes恐るべし。
開発者は忙しいので、あきらめます。
ありがとうございました。
あと、GWフル出社お疲れ様でした。
Posted at 2010/05/10 7:16 PM by pei
※コメントは承認制となっております。管理者が承認するまで表示されません。申し訳ありませんが、投稿が表示されるまでしばらくお待ちください。