0

我正在使用 Zend 制作一个社交网站。该网站允许用户成为朋友并访问彼此的个人资料和博客。我还希望用户能够控制他们的隐私,这可以采用“仅限朋友”和“公共”参数。我查看了 Zend_Acl 但它似乎只能处理单个用户的可访问性而不是用户有关系。关于最好的方法的任何想法?

4

1 回答 1

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;
    }
}

现在有了这个断言,如果 2 个用户 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
}

希望有帮助。

于 2012-07-31T22:52:12.840 回答