まず、ユーザーは同時に複数のロールを持つことができ、ロールにはスコープがあります。たとえば、1 人のユーザーに /scopeA/editor、/scopeA/programmer、/scopeB/editor の 3 つの役割があるとします。
/scopeA/editor はリソース /scopeA/post にアクセスできます /scopeA/programmer はリソース /scopeA/bug にアクセスできます
/scopeB/editor has access to resource /scopeB/post
質問が来ます:
ポリシーを次のように宣言するにはどうすればよいですか: ロール バッグに "/XX/editor" という名前のロールがある場合、"XX == YY" の場合、対応するユーザーは "/YY/post" にアクセスできます。
ここで同様の質問を見つけ、問題を解決する方法を提案しましたが、複数のロール (ロール属性値がバッグ) になると、私の答えは正しくありません。ロール属性値はバッグなので、ロール属性値の最初の 2 つのスラッシュの間の部分だけを取得して、リソース属性の値と比較することはできません。
次に、これを行う高次のバッグ関数を見つけようとしました。「urn:oasis:names:tc:xacml:3.0:function:any-of」関数でこれを実行できますが、最初の「関数引数」はどうですかany-of関数?
これが私がすることです:any-of関数の最初の引数は「string-equal」であり、2番目の引数はリソースIDの最初の2つのスラッシュの間の部分を取得するために使用される関数であり、3番目の引数はバッグであるサブジェクトの属性値。
最初の 2 つのスラッシュの間の部分を取得する関数を定義するだけです。
私がやりたいことをするためのより良い方法はありますか?ご不明な点がございましたら、お知らせください。よろしくお願いします~~