0

Zendを使ってソーシャルウェブサイトを作っています。このサイトでは、ユーザーが友達になり、お互いのプロフィールやブログにアクセスできます。また、ユーザーがプライバシーを制御できるようにします。プライバシーは、「友達のみ」と「公開」のパラメーターを取ることができます。Zend_Aclを見ましたが、ユーザーが関係を持っているのではなく、単一のユーザーのアクセシビリティしか処理できないようです。これを行うための最良の方法について何かアイデアはありますか?

4

1 に答える 1

0

目的のために、を使用する場合は、アサーションZend_Aclを確認する必要があります。

アプリケーション内のユーザー間の関係の複雑な性質を考えると、クエリするアクセスルールのほとんどは非常に動的に見えるため、アクセシビリティを決定するためにより複雑なロジックを使用できるアサーションに大きく依存します。

ただし、使用したいことを達成できるはず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 に答える