2012-07-31 25 views
0

我正在使用Zend製作一個社交網站。該網站允許用戶成爲朋友並訪問彼此的個人資料和博客。我還希望用戶能夠控制他們的隱私,可以使用「僅限朋友」和「公共」參數。我看着Zend_Acl,但它似乎只能處理單個用戶的可訪問性,而不是用戶之間的關係。任何關於最佳方式的想法?使用Zend的隱私控制

回答

0

你的目的,如果你使用Zend_Acl,你應該看看assertions

鑑於您的應用程序的用戶之間的關係的複雜性,你們中的大多數將查詢訪問規則似乎非常動態的,所以他們將在很大程度上依賴於可以使用更復雜的邏輯,以確定無障礙斷言。

你應該能夠完成你想要使用Zend_Acl雖然什麼。

你可以建立一個ACL規則是這樣的:

$acl->allow('user', 'profile', 'view', new My_Acl_Assertion_UsersAreFriends()); 

的ACL斷言本身:

<?php 

class My_Acl_Assertion_UsersAreFriends implements Zend_Acl_Assert_Interface 
{ 
    public function assert(Zend_Acl $acl, 
          Zend_Acl_Role_Interface $role = null, 
          Zend_Acl_Resource_Interface $resource = null, 
          $privilege = null) 
    { 
     return $this->_usersAreFriends(); 
    } 

    protected function _usersAreFriends() 
    { 
     // get UserID of current logged in user 
     // assumes Zend_Auth has stored a User object of the logged in user 
     $user = Zend_Auth::getInstance()->getStorage(); 
     $userId = $user->getId(); 

     // get the ID of the user profile they are trying to view 
     // assume you can pull it from the URL 
     // or your controller or a plugin can set this value another way 
     $userToView = $this->getRequest()->getParam('id', null); 

     // call your function that checks the database for the friendship 
     $usersAreFriends = usersAreFriends($userId, $userToView); 

     return $usersAreFriends; 
    } 
} 
這種說法到位

現在,訪問將被如果兩個用戶ID被拒絕不是朋友。

檢查,如:

if ($acl->isAllowed('user', 'profile', 'view')) { 
    // This will use the UsersAreFriends assertion 

    // they can view profile 
} else { 
    // sorry, friend this person to view their profile 
} 

希望有所幫助。