認証されたユーザーが、ユーザーの種類ではなく、特定のコントローラー/アクションへのアクセスを許可されるソリューションが必要です。管理者または通常のユーザー (後で標準の ACL を使用してこれを追加する可能性がありますが) が、ユーザーの現在のステータスに応じて異なります。
例えば :
彼らは 1 週間以上サイトのメンバーでしたか?
彼らは自分のプロフィールを完全に記入しましたか?
実際、今考えてみると、彼らがこのサイトに特権とバッジを持っているようなものです。
認証されたユーザーが、ユーザーの種類ではなく、特定のコントローラー/アクションへのアクセスを許可されるソリューションが必要です。管理者または通常のユーザー (後で標準の ACL を使用してこれを追加する可能性がありますが) が、ユーザーの現在のステータスに応じて異なります。
例えば :
彼らは 1 週間以上サイトのメンバーでしたか?
彼らは自分のプロフィールを完全に記入しましたか?
実際、今考えてみると、彼らがこのサイトに特権とバッジを持っているようなものです。
説明しているような動的条件ベースのテストでは、ルールで動的アサーションZend_Acl
を使用できます。
例えば:
class My_Acl_IsProfileComplete implements Zend_Acl_Assert_Interface
{
protected $user;
public function __construct($user)
{
$this->user = $user;
}
public function assert(Zend_Acl $acl,
Zend_Acl_Role_Interface $role = null,
Zend_Acl_Resource_Interface $resource = null,
$privilege = null)
{
// check the user's profile
if (null === $this->user){
return false;
}
return $this->user->isProfileComplete(); // for example
}
}
次に、Acl オブジェクトを定義するとき:
$user = Zend_Auth::getInstance()->getIdentity();
$assertion = new My_Acl_Assertion_IsProfileComplete($user);
$acl->allow($role, $resource, $privilege, $assertion);
もちろん、詳細の一部は、確認する必要があるものの詳細に依存し、Zend_Auth::setIdentity()
呼び出しで何を使用できるかは、ユーザー ID のみ、完全なユーザー オブジェクトなどに依存します。また、役割、リソース、権限は完全にアプリ固有です。しかし、うまくいけば、これでアイデアが得られます。
また、アサーション オブジェクトはインスタンス化時にユーザー オブジェクトを必要とするため、この動的ルールを Bootstrap で追加することはできません。ただし、ブートストラップ中に静的ルールを使用してコア Acl インスタンスを作成しpreDispatch()
、動的アサーションを追加するフロント コントローラー プラグインを (たとえば、で実行するために) 登録することができます。このようにして、コントローラーをチェックしていると思われる場所に到達するまでに、Acl は完全に設定されます。
大声で考えているだけです。