# 用戶和權限
<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);
```