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