1

BaseUser を拡張するカスタム User クラスがあります。

ユーザー ロック機能を利用するには、ユーザー クラスで AdvancedUserInterface を実装する必要があるとのことですが、ユーザー クラスで EXTENDS と IMPLEMENTS の両方を実行することはできないようです。

<?php
// src/BizTV/UserBundle/Entity/User.php

namespace BizTV\UserBundle\Entity;

use BizTV\UserBundle\Validator\Constraints as BizTVAssert;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;

use FOS\UserBundle\Entity\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;

use BizTV\BackendBundle\Entity\company as company;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser implements AdvancedUserInterface
{

このアプローチでは、エラー メッセージは表示されませんが、ユーザー ロックをチェックする関数も使用できないため、何も起こらないように見えます。

このように切り替えると、

class User implements AdvancedUserInterface extends BaseUser 

次のエラー メッセージが表示されます。

Parse error: syntax error, unexpected T_EXTENDS, expecting '{' in /var/www/cloudsign/src/BizTV/UserBundle/Entity/User.php on line 18
4

2 に答える 2

0

実際には、何も作成する必要はありません。user->isLocked() を呼び出すだけです :) FOSUserBundle の BaseUser クラスですでに実装されています ;)

于 2015-09-09T17:52:38.263 に答える
0

OK、私はこれを行うことでそれを解決しました:

ユーザー エンティティに独自の関数を追加して、ロック ステータスを取得します (定義していない変数で、拡張元のユーザー クラスに既に存在していました)。

//Below should be part of base user class but doesn't work so I implement it manually.

/**
 * Get lock status
 *
 * @return boolean 
 */
public function getLocked()
{
    return $this->locked;
}    

そして UserChecker にこれを入れました:

public function checkPreAuth(UserInterface $user)
{

    //Test for companylock...
    if ( !$user->getCompany()->getActive() ) {
        throw new LockedException('The company of this user is locked.', $user);
    }    

    if ( $user->getLocked() ) {
        throw new LockedException('The admin of this company has locked this user.', $user);
    }

...

/**
 * {@inheritdoc}
 */
public function checkPostAuth(UserInterface $user)
{

    //Test for companylock...
    if ( !$user->getCompany()->getActive() ) {
        throw new LockedException('The company of this user is locked.', $user);
    }    

    if ( $user->getLocked() ) {
        throw new LockedException('The admin of this company has locked this user.', $user);
    }
于 2013-09-12T12:55:55.057 に答える