2011-01-04 11 views
1

私はユーザーと企業が参加できるポータルを構築しています。ユーザーは独立していても会社の下で働いていてもかまいません。タイプにかかわらず(すべてのユーザーが独立しているか、会社に関連付けられているかにかかわらず)利用できる基本的なアクセスがいくつかあります。独立したユーザーが利用できる機能がいくつかありますが、ユーザーが会社の下にいる場合、会社のマネージャーは特定の機能へのアクセスを許可/禁止できます。 Zend_Aclを使ってこれをどうやって管理できますか?zend acl複数のアクセスリスト/レベル

+0

あなたはまずZend_Aclの紹介を読んでください。そして、あなたはあなたがタスクを管理する方法を知らないのですか? http://framework.zend.com/manual/en/zend.acl.introduction.html –

+0

私はデータベースにacl(ロール、リソース、アクセス権/モード)を保存していますが、2つの異なるテーブルグループがあります。 1つはサイト関連を処理し、2つ目は会社の管理者が管理するアクセスを処理しています。では、2種類のACLをどのように管理できますか?マニュアルに記載されている詳細は、データベースを使ってaclsを管理する方法についても説明していません。私はこれを達成することができましたが、複数のタイプのACLに関するいくつかのガイダンスが必要です – Bryan

答えて

1

あなたはACLの条件を満たすことができます。

私のACL(途中でプラグイン)を宣言するファイルでは、次の宣言があります。 Acl_AdminCanAccessUsersZend_Acl_Assert_Interfaceであり、TRUEまたはFALSEのいずれかを返します。ここでは、要求オブジェクトをコンストラクタに渡しています。今、彼らはisAdminを持っている場合は、私たちがユーザー・レコードのDBをチェックし、要求されたパラメータと比較するか、チェックしている、ここで見ることができるようにのはAcl_AdminCanAccessUsers

<?php 

class Acl_AdminCanAccessUsers implements Zend_Acl_Assert_Interface 
{ 

public function __construct($request) { 
    $this->request = $request; 
} 

public function assert(Zend_Acl $acl, 
         Zend_Acl_Role_Interface $role = null, 
         Zend_Acl_Resource_Interface $resource = null, 
         $privilege = null) 
{ 

    /** 
    * Can only test when trying to edit a user account 
    */ 
    if ("edit" != $privilege) { 
     return TRUE; 
    } 

    $identity = Zend_Auth::getInstance()->getIdentity(); 

    /** 
    * Get the id from the URL request 
    */ 
    $id = $this->request->getParam('id'); 

    /** 
    * Get user account from DB 
    */ 
    $user = Doctrine_Core::getTable('User')->find($id); 

    // Are they editing their own account? Give them a pass 
    if ($identity->user_id == $user->user_id) { 
     return TRUE; 
    } 

    // If they don't have the isAdmin flag set to yes on their account 
    // Then we'll just deny them immediately 
    if ($identity->isAdmin) { 
     return TRUE; 
    } 

    return FALSE; 
} 
} 

を見てみましょう

// Complex function to see if the current user can create/edit the desired user account. 
    $acl->allow('client', 'user', array('edit','create'), new Acl_AdminCanAccessUsers($this->_request)); 

それらのZend_Authアイデンティティに設定されたフラグ。役割、リソース、特権以外にアクセスする必要がある場合は、ACLの条件付き検査をたくさん行うことができます。

ハッピーコーディング!

関連する問題