【Salesforce】アクセス権でハマッた
Salesforceの共有設定で「参照・更新」権限を付与しているのに削除することが出来ないという現象はよくあります。
「アクセス権がありません。」というエラー画面が表示されるやつです。
共有設定で付与できるのは「参照・更新」であり、フルアクセスの権限でなければ削除できないということですね。
https://help.salesforce.com/articleView?id=000005672&language=ja&type=1
さて、今回起きていたのはその逆で、「参照・更新」権限のユーザなのにレコードを削除出来てしまうという問題でした。
とある主従のオブジェクトがあります。
主オブジェクトのレコードを作成したユーザとは別のユーザが、主オブジェクトのレコードに紐づく従オブジェクトのレコードを作成します。
このとき、従オブジェクトのレコードを作成したユーザは共有設定で主オブジェクトのレコードに「参照・更新」のアクセス権を付与されています。
所有者は主オブジェクトのレコードを作成したユーザになっているため、従オブジェクトのレコードのアクセス権は主オブジェクトのレコードを継承します。
つまり、従オブジェクトのレコードを作成したユーザは自分が作成したレコードを削除出来ないはず、なのですが、削除出来てしまいました。
削除出来ても問題がないレコードだったのですが、想定と異なる動きをしていたので気持ちが悪くて調べました。
まず初めに確認したのは、共有設定です。
主レコードである主オブジェクトの共有設定が、実は公開になっているのではないかと疑ったわけですね。
ここに関してはちゃんと非公開になっていました。
念のため共有設定で共有していないユーザで確認しましたが、アクセス権がないのでエラーとなりました。
当然ですね。
次に確認したのは、ユーザのロールです。
所有者ユーザのロールと削除ユーザのロールの階層を確認し、削除ユーザのロールが所有者ユーザのロールの上位にあれば所有者ユーザのフルアクセス権限が付与されます。
しかし、こちらもそのようにはなっておらず、所有者ユーザのロールの方が上位にありました。
そもそも、レコードの共有設定はどうなっているのかと詳細画面から確認してみても、削除ユーザのロールに共有設定で付与された「参照・更新」があるだけでした。
分からないのは悔しいので色々と調べていると、このような記事を見つけました。
主レコードのアクセスレベルによって、従レコードの削除権限を決められるようです。
これはと思い、従オブジェクトの主レコードへの参照項目を確認しました。
項目の共有設定には
主レコードの「参照・更新」以上のアクセス権を持つユーザに対して、関連する従レコードの作成、編集、削除を許可します。
と書かれています。
上に書いたように主レコードには共有設定によって「参照・更新」権限があるため、このオプションによってレコードが削除可能、ということです。
あまり気にしたことがないオプションでした。
そんなわけで、何とか原因を突き止めることができました。
削除可能であればレコードの共有設定に書いてくれると有難いのですが、フルアクセスとは違うので難しいのかもしれません。
レコードのアクセス権、まだまだ奥が深いですね。
No comments.