# 用户和权限
<p class="uk-article-lead">Pagekit 自带一套注册程序和强大的用户管理器。对于系统中的所有用户,都可以在扩展中轻松地管理角色和权限。</p>
[toc=2]
## 概念
**用户/user**,即是在你网站上注册并以用户名来识别的人。用户账户的状态可以是 *激活/active*, *屏蔽/blocked* 或者 *新用户/new*。用户可以在网站或管理区域登录。并非所有用户的账号都允许访问管理区域。
**权限/Permissions** 定义用户可以执行的操作。权限由它的名称来区分,例如 `user: access admin area`。权限名称应当是描述性的,并以相关模块的名称开头,例如 `user:` 对于用户模块。
**角色/Roles** 将一些用户账号分组。所有相同角色的用户拥有相同的权限。角色还用于管理网站内容的访问。一个用户可以属于零个、一个或多个角色。一个角色也可以被指定任意数目的用户。Pagekit 默认设置了 **Anonymous**, **Authenticated** 和 **Administrator** 三种角色,也允许你创建更多角色。
## 只对特定角色显示内容
角色可以非常灵活地使用。你可以创建一些只有选中的用户才能访问的内容。.
1. 在 *Users > Roles* 创建新的角色 **Premium**。不要为它指定任何权限。
2. 在 *Users > List*中,点击一个用户账号编辑它的信息并为该用户启用**Premium**角色。
3. zai *Site*中的每个页面,你都可以在边栏中看到一个*Restrict access* 。确保只选择了它,不要选其他的。
该条目现在就只能被已登录的**Premium**角色的用户看到。
**Note** 你的管理员账号同样也不能看到这个内容,除非管理员账号也被设置为 **Premium** 角色,或者在 *Restrict access* 设置中启用了在**Administrator**。
## 从模块定义中注册权限
要为管理区域添加权限,并且可以将该权限指定给某个角色,在扩展的 `index.php` 文件中使用 `permissions` 关键字。
使用口语权限名。约定以扩展的名称开头,然后用简短的句子描述权限,都使用小写字母。`title` 是显示在浏览器中的字符串。`_()` 使该字符串是可以翻译的。
```php
'permissions' => [
'hello: manage settings' => [
'title' => _('Manage settings')
],
],
```
检查,该用户是否有一个指定 ID的角色。
```php
$role_id = 4;
App::user()->hasRole($role_id);
```
检查,该用户是否有一个指定名称的角色。
```php
$role_name = "Editor";
$role = Role::where('name = ?', [$role_name])->first();
App::user()->hasRole($role->id);
```