在 TYPO3 CMS 扩展中添加带密码的 BE 用户

Add BE user with password in TYPO3 CMS extension

我已经在自己的 TYPO3 CMS 8.7.0 扩展中成功创建了一个 BE 用户。

存储库注入:

/**
 * beUserRepository
 *
 * @var \TYPO3\CMS\Extbase\Domain\Repository\BackendUserRepository
 * @inject
 */
protected $beUserRepository = null;

ActionController 的一部分:

$beuser = new \TYPO3\CMS\Extbase\Domain\Model\BackendUser();
$beuser->setUserName($username);
$beuser->setEmail($email);
$beuser->setRealName($realname);
$this->beUserRepository->add($beuser);

这工作正常,但我无法像 setPassword() 的 FE 用户那样添加密码。有什么方法可以到达那里,还是出于安全原因限制为 set/change BE 用户密码?

在您的扩展程序中创建您自己的 BackendUser 模型

<?php
namespace YourVendor\YourExtKey\Domain\Model;

class BackendUser extends \TYPO3\CMS\Extbase\Domain\Model\BackendUser
{
    /**
     * @var string
     */
    protected $password = '';

    /**
     * Returns the password
     *
     * @return string
     */
    public function getPassword()
    {
        return $this->password;
    }

    /**
     * Sets the password
     *
     * @param string $password
     * @return void
     */
    public function setPassword($password)
    {
        $this->password = (string)$password;
    }
}

创建您自己的存储库

<?php
namespace YourVendor\YourExtKey\Domain\Repository;

class BackendUserRepository extends \TYPO3\CMS\Extbase\Domain\Repository\BackendUserRepository
{
}

然后将您的新域模型映射到 be_users table:

plugin.tx_yourExtKey {
    persistence {
        classes {
            YourVendor\YourExtKey\Domain\Model\BackendUser {
                mapping {
                    tableName = be_users
                }
            }
        }
    }
}

更新您的控制器以使用您的新存储库

/**
 * beUserRepository
 *
 * @var \YourVendor\YourExtKey\Domain\Repository\BackendUserRepository
 * @inject
 */
protected $beUserRepository;

回到行动中

$beUser = new \YourVendor\YourExtKey\Domain\Model\BackendUser();
$saltFactory = \TYPO3\CMS\Saltedpasswords\Salt\SaltFactory::getSaltingInstance('', 'BE');
$beUser->setPassword($saltFactory->getHashedPassword($newPassword));

TYPO3\CMS\Extbase\Domain\Model\BackendUser没有密码属性,所以不扩展模型是不能设置密码的。最简单的方法是,如果您在扩展 TYPO3\CMS\Extbase\Domain\Model\BackendUser 的扩展中创建自己的 BackendUser 模型并在 TS 中配置映射。它只需要 $password 属性 和 getters/setters 以及一个存储库。