使用授权
配置
更改可用组
可用的组在 app/Config/AuthGroups.php 配置文件中的 $groups
属性下定义。向数组中添加新条目或删除现有条目,以便在整个应用程序中使用它们。
public array $groups = [
'superadmin' => [
'title' => 'Super Admin',
'description' => 'Complete control of the site.',
],
//
];
设置默认组
当用户在你的网站上注册时,他们将被分配 Config\AuthGroups::$defaultGroup
中指定的组。更改此项为 $groups
数组中的一个键以更新此项。
更改可用权限
网站上的权限也存储在 AuthGroups
配置文件中。每个权限由一个字符串定义,该字符串表示一个上下文和一个权限,并用小数点连接。
public array $permissions = [
'admin.access' => 'Can access the sites admin area',
'admin.settings' => 'Can access the main site settings',
'users.manage-admins' => 'Can manage other admins',
'users.create' => 'Can create new non-admin users',
'users.edit' => 'Can edit existing non-admin users',
'users.delete' => 'Can delete existing non-admin users',
'beta.access' => 'Can access beta-level features',
];
为组分配权限
每个组都可以有自己特定的权限集。这些权限在 Config\AuthGroups::$matrix
中定义。你可以通过其全名或使用上下文和星号 (*) 来指定每个权限,以指定该上下文中的所有权限。
public array $matrix = [
'superadmin' => [
'admin.*',
'users.*',
'beta.access',
],
//
];
为用户分配权限
权限也可以直接分配给用户,无论他们属于哪个组。这是在 User
实体上以编程方式完成的。
$user = auth()->user();
$user->addPermission('users.create', 'beta.access');
这将添加所有新权限。您还可以同步权限,以便用户仅拥有直接分配给他们的权限。未在提供列表中的任何权限都将从用户中移除。
$user = auth()->user();
$user->syncPermissions('users.create', 'beta.access');
检查用户是否拥有权限
当您需要检查用户是否拥有特定权限时,请对User
实体使用can()
方法。此方法检查他们所属组中的权限和直接分配给用户的权限。
if (! auth()->user()->can('users.create')) {
return redirect()->back()->with('error', 'You do not have permissions to access that page.');
}
注意
如果要将上述示例应用于网站的多个页面,还可以通过控制器过滤器来完成。
向用户添加组
通过addGroup()
方法将组分配给用户。您可以传入多个组,它们都将分配给用户。
$user = auth()->user();
$user->addGroup('admin', 'beta');
这将添加所有新组。您还可以同步组,以便用户仅属于直接分配给他们的组。未在提供列表中的任何组都将从用户中移除。
$user = auth()->user();
$user->syncGroups('admin', 'beta');
从用户中移除组
通过removeGroup()
方法从用户中移除组。可以通过将所有组名传递到方法中来一次性移除多个组。
$user = auth()->user();
$user->removeGroup('admin', 'beta');
检查用户是否属于组
您可以使用inGroup()
方法检查用户是否属于某个组。
$user = auth()->user();
if ($user->inGroup('admin')) {
// do something
}
您可以向该方法传递多个组,如果用户属于任何指定组,它将返回true
。
$user = auth()->user();
if ($user->inGroup('admin', 'beta')) {
// do something
}