ACL を処理するには、モジュールを繰り返し実行してリスト内の各エントリ (ACE) に適用します。LDAP サーバーからどの順序で ACL のエントリが返されるかは決まっていないため、エントリの順序が結果に影響することを前提としてはならないということを覚えておいてください。エントリごとに以下が繰り返されます。
-
- このエントリがこのユーザーに適用される場合
- これが許可規則の場合
- これが、今まで処理したどの規則よりも高い順位の規則の場合
- ユーザーのための現在の許可済みのアクセス レベルおよびパーミッション セットがリセットされます
- エントリで指定されているアクションごとに、以下が繰り返されます
- このアクションによって、より高いレベルのアクセス権を指定する場合
- 指定されたアクションがユーザーの許可済みパーミッション セットに追加されます
- それ以外の場合 (これが拒否規則の場合)
- これが、今まで処理したどの規則よりも高い順位の規則の場合
- ユーザーのための現在の拒否済みのアクセス レベルおよびパーミッション セットがリセットされます
- エントリで指定されているアクションごとに、以下が繰り返されます
- このアクションによって、より低いレベルのアクセス権を指定する場合
- 指定されたアクションがユーザーの拒否済みパーミッション セットに追加されます
- このエントリが、適用可能なグループに適用される場合
- 上記と同じことが行われますが、group-allow 変数および group-deny 変数が更新されます
ACL がすべて処理された後:
- 適用可能なエントリが見つからなかった場合は、次の規則を使用して続行されます
- これが AUTH (MTO リソースの、メインフレーム形式のアクセス レベル) 要求の場合
- グループ エントリが見つかったがユーザー エントリがない場合は、グループ エントリが使用されます
- ユーザー エントリが見つかったがグループ エントリがない、またはユーザー エントリの順位がグループ エントリと同じかそれより高い場合は、ユーザー エントリが使用されます
- これがアクセス要求の場合
- 順位が許可エントリと同じかそれより高い拒否エントリがある、または拒否レベルが、要求されたレベル以下の場合
- それ以外で、要求されたレベルが許可済みレベルより高い場合
- それ以外の場合
- それ以外の場合 (これはパーミッション問合せです)
- 順位が許可エントリと同じかそれより高い拒否エントリがある場合
- 許可済みレベルが、最も低い拒否済みレベルの 1 つ下に下がります (たとえば、更新が拒否された場合は、読み込む許可済みレベルが下がります)
- 許可済みレベルが返されます
- それ以外の場合 (これは XAUTH の、MFDS リソースのパーミッション セット要求です)
- user-allow、user-deny、group-allow、および group-deny パーミッションの順位が比較されます
- それら 4 つのうちのどれが最上位かで、ユーザー規則がグループ規則より重要か、またはその逆かが判断されます (ユーザーおよびグループの順位が等しい場合は、ユーザーが上位とみなされます)
- パーミッションの最終的なセットが次のように算出されます
- より順位の低い許可済みパーミッションが追加されます
- より順位の低い拒否済みパーミッションが削除されます
- より順位の高い許可済みパーミッションが追加されます
- より順位の高い拒否済みパーミッションが削除されます
- これがアクセス要求の場合
- 要求されたパーミッションがすべて結果セット内にある場合
- それ以外の場合
- それ以外の場合 (これはパーミッション問合せです)
つまり、アクセス レベル要求では、まずユーザー規則またはグループ規則を適用する必要があるかどうかが決定され (順位に基づく)、次に、それらの規則から導き出されるレベルが特定され、そのレベルに基づいて適切な結果が返されます。
パーミッション セット要求では、順位の低い規則から開始され、より順位の高い規則がそれらより優先されて、最終的な有効な一連のパーミッションが決定されます。