跳至内容

管理用户

由于 Shield 使用比许多其他系统更复杂的设置,因此将用户身份与用户帐户本身分开。此快速概览应有助于你在日常工作中更自信地处理用户。

通过代码管理用户

查找用户

你可以从用户提供程序中找到现有用户。它返回一个用户实体

// Get the User Provider (UserModel by default)
$users = auth()->getProvider();

// Find by the user_id
$user = $users->findById(123);
// Find by the user email
$user = $users->findByCredentials(['email' => '[email protected]']);

创建用户

默认情况下,存储在用户表中的唯一值是用户名。

第一步是使用用户名创建用户记录。如果你没有用户名,请务必将值设置为null,以便它通过 CodeIgniter 的空数据检查。

use CodeIgniter\Shield\Entities\User;

// Get the User Provider (UserModel by default)
$users = auth()->getProvider();

$user = new User([
    'username' => 'foo-bar',
    'email'    => '[email protected]',
    'password' => 'secret plain text password',
]);
$users->save($user);

// To get the complete user object with ID, we need to get from the database
$user = $users->findById($users->getInsertID());

// Add to default group
$users->addToDefaultGroup($user);

删除用户

用户的资料可能会分布在几个不同的表格中,因此你可能会担心如何从系统中删除所有用户资料。对于 Shield 已知的所有信息,这将在数据库级别自动处理,通过表格外键的 onCascade 设置。

你可以像删除其他实体一样删除用户。

// Get the User Provider (UserModel by default)
$users = auth()->getProvider();

$users->delete($user->id, true);

注意

用户行使用 软删除,因此除非第二个参数为 true,否则它们实际上不会从数据库中删除,如上所示。

编辑用户

UserModel::save()update()insert() 方法已修改,以确保之前在 User 实体上设置的电子邮件或密码将自动更新在正确的 UserIdentity 记录中。

// Get the User Provider (UserModel by default)
$users = auth()->getProvider();

$user = $users->findById(123);
$user->fill([
    'username' => 'JoeSmith111',
    'email' => '[email protected]',
    'password' => 'secret123'
]);
$users->save($user);

通过 CLI 管理用户

Shield 有一个 CLI 命令来管理用户。你可以执行以下操作

create:      Create a new user
activate:    Activate a user
deactivate:  Deactivate a user
changename:  Change user name
changeemail: Change user email
delete:      Delete a user
password:    Change a user password
list:        List users
addgroup:    Add a user to a group
removegroup: Remove a user from a group

你可以通过在终端中运行以下命令来获取有关如何使用它的帮助

php spark shield:user --help