ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 用于与权限 后端的用户管理包括角色,组,权限,密码重置和登录限制等功能。插件还可以注册权限,以控制对后端功能的访问。 ### [](https://octobercms.com/docs/backend/users#users-and-permissions)用户和权限 对OctoberCMS实例的所有部分的访问由权限系统控制。在最低级别上,有超级用户(`is_superuser`标记设置为true的用户),管理员(用户)和权限。这些`\Backend\Models\User`模型是包含有关用户的所有重要信息的容器。 超级用户可以访问系统中的所有内容,并且只能由他们自己或其他超级用户来管理;即使管理员拥有`backend.manage_users`权限,常规管理员也无法看到或编辑它们。 权限是形式为字符串的密钥,`author.plugin.permission_name`通过直接在用户的“编辑管理员”页面上分配或通过用户角色的继承来授予用户。 在检查用户是否具有特定权限时,该用户角色的权限设置将被继承,然后被直接应用于该用户的任何权限覆盖。例如,如果用户**Bob**拥有角色**Genius**,而角色**Genius**拥有`eat_cake`权限,但是**Bob**的`eat_cake`权限被专门设置为拒绝,则**Bob**不会进入`eat_cake`。但是,如果**Bob**拥有`eat_vegetables`直接分配给他的权限,而**Genius**角色则没有,则**Bob**仍然拥有权限`eat_vegetables`。 角色(`\Backend\Models\UserRole`)是权限的分组,名称和描述用于标识角色。管理员一次只能分配一个角色。一个角色可以分配给多个管理员。十月默认提供两个系统角色,`developer`和`publisher`。可以创建具有其自己的权限组合的任意数量的自定义角色,并将其应用于用户。 > **注意:**拥有`manage_users`权限的任何用户都可以管理角色的分配,但只能管理其他用户(而不是自己)的角色,并且角色只能由超级用户创建或修改。 > > **注意:**系统角色(`developer`,`publisher`和任何`is_system`设置为的角色`true`)不能通过后端更改其权限。假定它们具有对所有权限的访问权限,除非给定的权限`roles`在权限的定义中使用数组键指定了一个或多个特定的角色(在这种情况下,只有指定的系统角色才可以访问)。 组(`\Backend\Models\UserGroup`)是用于对管理员进行分组的组织工具,可以将它们视为“用户类别”。它们与权限无关,并且仅用于组织目的。例如,如果您想向该组中的所有用户发送电子邮件,则`Head Office Staff`只需执行`Mail::sendTo(UserGroup::where('code', 'head-office-staff')->get()->users, 'author.plugin::mail.important_notification', $data);` ### [](https://octobercms.com/docs/backend/users#backend-auth-facade)后端用户助手 全局`BackendAuth`外观可以用于管理主要继承`October\Rain\Auth\Manager`该类的管理用户。若要注册新的管理员用户帐户,请使用`BackendAuth::register`方法。 ~~~ $user = BackendAuth::register([ 'first_name' => 'Some', 'last_name' => 'User', 'login' => 'someuser', 'email' => 'some@website.tld', 'password' => 'changeme', 'password_confirmation' => 'changeme' ]); ~~~ 该`BackendAuth::check`方法是检查用户是否已登录的快速方法。要返回已登录的用户模型,请`BackendAuth::getUser`改用。此外,活动用户将可以`$this->user`在任何[后端控制器中使用](https://octobercms.com/docs/backend/controllers-ajax)。 ~~~ // Returns true if signed in. $loggedIn = BackendAuth::check(); // Returns the signed in user $user = BackendAuth::getUser(); // Returns the signed in user from a controller $user = $this->user; ~~~ 您可以使用`BackendAuth::findUserByLogin`方法通过用户的登录名查找用户。 ~~~ $user = BackendAuth::findUserByLogin('someuser'); ~~~ 您可以通过提供登录名和密码来验证用户身份`BackendAuth::authenticate`。您还可以通过将`Backend\Models\User`模型与一起传递,从而简单地认证为用户`BackendAuth::login`。 ~~~ // Authenticate user by credentials $user = BackendAuth::authenticate([ 'login' => post('login'), 'password' => post('password') ]); // Sign in as a specific user BackendAuth::login($user); ~~~ ### [](https://octobercms.com/docs/backend/users#permission-registration)注册权限 插件可以通过覆盖[Plugin注册类中](https://octobercms.com/docs/plugin/registration#registration-file)的`registerPermissions`方法来注册后端用户权限。权限定义为一个数组,其中的键对应于权限键,值对应于权限描述。权限密钥由作者名称,插件名称和功能名称组成。这是示例代码:[](https://octobercms.com/docs/plugin/registration#registration-file) ~~~ acme.blog.access_categories ~~~ 下一个示例显示如何注册后端许可项。使用权限密钥和说明定义权限。在后端权限管理中,用户界面权限显示为复选框列表。后端控制器可以使用插件定义的权限来限制用户对[页面](https://octobercms.com/docs/backend/users#page-access)或[功能的](https://octobercms.com/docs/backend/users#features)访问。 ~~~ public function registerPermissions() { return [ 'acme.blog.access_posts' => [ 'label' => 'Manage the blog posts', 'tab' => 'Blog', 'order' => 200, ], // ... ]; } ~~~ 您也可以将`roles`选项指定为数组,每个值作为角色API代码。使用此代码创建角色后,它将成为系统角色,该角色始终向具有该角色的用户授予此权限。 ~~~ public function registerPermissions() { return [ 'acme.blog.access_categories' => [ 'label' => 'Manage the blog categories', 'tab' => 'Blog', 'order' => 200, 'roles' => ['developer'] ] // ... ]; } ~~~ ### [](https://octobercms.com/docs/backend/users#page-access)限制访问后端页面 在后端控制器类中,您可以指定访问控制器提供的页面所需的权限。这是通过`$requiredPermissions`控制器的属性完成的。此属性应包含一个权限密钥数组。如果用户权限与列表中的任何权限匹配,则框架将允许用户查看控制器页面。 ~~~ <?php namespace Acme\Blog\Controllers; use Backend\Classes\BackendController; class Posts extends BackendController { public $requiredPermissions = ['acme.blog.access_posts']; } ~~~ 您还可以使用**星号**符号表示“所有权限”条件。在下一个示例中,所有具有“ acme.blog”权限的用户都可以访问控制器页面。串: ~~~ public $requiredPermissions = ['acme.blog.*']; ~~~ ### [](https://octobercms.com/docs/backend/users#features)限制对功能的访问 后端用户模型具有允许确定用户是否具有特定权限的方法。您可以使用此功能来限制后端用户界面的功能。后端用户支持的许可方法为`hasAccess`和`hasPermission`。这两种方法都带有两个参数:权限密钥字符串(或密钥字符串数组)和一个可选参数,指示第一个参数列出的所有权限都是必需的。 如果用户是超级用户(设置为),则该`hasAccess`方法针对任何权限返回**true**。该方法更加严格,仅当用户实际上在其帐户或角色中具有指定的权限时才返回true。通常,是首选的方法,因为它会考虑超级用户的绝对能力。以下示例显示如何使用控制器代码中的方法:`is_superuser``true``hasPermission``hasAccess` ~~~ if ($this->user->hasAccess('acme.blog.*')) { // ... } if ($this->user->hasPermission([ 'acme.blog.access_posts', 'acme.blog.access_categories' ])) { // ... } ~~~ 您也可以使用后端视图中的方法隐藏用户界面元素。下一个示例演示如何隐藏“编辑类别”[后端表单](https://octobercms.com/docs/backend/forms)上的按钮: ~~~ <?php if ($this->user->hasAccess('acme.blog.delete_categories')): ?> <button type="button" class="oc-icon-trash-o btn-icon danger pull-right" data-request="onDelete" data-load-indicator="Deleting Category..." data-request-confirm="Do you really want to delete this category?"> </button> <?php endif ?> ~~~