From 23fd0ae0b584748ce8bb46a0277d99bafb9217d9 Mon Sep 17 00:00:00 2001
From: Summer <summer@learnku.com>
Date: Mon, 7 Mar 2022 19:11:57 +0800
Subject: [PATCH] =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=E5=8F=AF=E4=BB=A5?=
 =?UTF-8?q?=E7=AE=A1=E7=90=86=E6=9D=83=E9=99=90=E5=92=8C=E8=A7=92=E8=89=B2?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 config/administrator.php             |  2 +
 config/administrator/permissions.php | 67 +++++++++++++++++++++++++
 config/administrator/roles.php       | 75 ++++++++++++++++++++++++++++
 3 files changed, 144 insertions(+)
 create mode 100644 config/administrator/permissions.php
 create mode 100644 config/administrator/roles.php

diff --git a/config/administrator.php b/config/administrator.php
index fa8cbada0..03b18dc92 100644
--- a/config/administrator.php
+++ b/config/administrator.php
@@ -41,6 +41,8 @@
     'menu' => [
         '用户与权限' => [
             'users',
+            'roles',
+            'permissions',
         ],
     ],
 
diff --git a/config/administrator/permissions.php b/config/administrator/permissions.php
new file mode 100644
index 000000000..08c2a1483
--- /dev/null
+++ b/config/administrator/permissions.php
@@ -0,0 +1,67 @@
+<?php
+
+use Spatie\Permission\Models\Permission;
+use Illuminate\Support\Facades\Auth;
+
+return [
+    'title'   => '权限',
+    'single'  => '权限',
+    'model'   => Permission::class,
+
+    'permission' => function () {
+        return Auth::user()->can('manage_users');
+    },
+
+    // 对 CRUD 动作的单独权限控制,通过返回布尔值来控制权限。
+    'action_permissions' => [
+        // 控制『新建按钮』的显示
+        'create' => function ($model) {
+            return true;
+        },
+        // 允许更新
+        'update' => function ($model) {
+            return true;
+        },
+        // 不允许删除
+        'delete' => function ($model) {
+            return false;
+        },
+        // 允许查看
+        'view' => function ($model) {
+            return true;
+        },
+    ],
+
+    'columns' => [
+        'id' => [
+            'title' => 'ID',
+        ],
+        'name' => [
+            'title'    => '标示',
+        ],
+        'operation' => [
+            'title'    => '管理',
+            'sortable' => false,
+        ],
+    ],
+
+    'edit_fields' => [
+        'name' => [
+            'title' => '标示(请慎重修改)',
+
+            // 表单条目标题旁的『提示信息』
+            'hint' => '修改权限标识会影响代码的调用,请不要轻易更改。'
+        ],
+        'roles' => [
+            'type' => 'relationship',
+            'title' => '角色',
+            'name_field' => 'name',
+        ],
+    ],
+
+    'filters' => [
+        'name' => [
+            'title' => '标示',
+        ],
+    ],
+];
diff --git a/config/administrator/roles.php b/config/administrator/roles.php
new file mode 100644
index 000000000..522733c74
--- /dev/null
+++ b/config/administrator/roles.php
@@ -0,0 +1,75 @@
+<?php
+
+use Spatie\Permission\Models\Role;
+use Illuminate\Support\Facades\Auth;
+
+return [
+    'title'   => '角色',
+    'single'  => '角色',
+    'model'   => Role::class,
+
+    'permission'=> function()
+    {
+        return Auth::user()->can('manage_users');
+    },
+
+    'columns' => [
+        'id' => [
+            'title' => 'ID',
+        ],
+        'name' => [
+            'title' => '标识'
+        ],
+        'permissions' => [
+            'title'  => '权限',
+            'output' => function ($value, $model) {
+                $model->load('permissions');
+                $result = [];
+                foreach ($model->permissions as $permission) {
+                    $result[] = $permission->name;
+                }
+
+                return empty($result) ? 'N/A' : implode(' | ', $result);
+            },
+            'sortable' => false,
+        ],
+        'operation' => [
+            'title'  => '管理',
+            'output' => function ($value, $model) {
+                return $value;
+            },
+            'sortable' => false,
+        ],
+    ],
+
+    'edit_fields' => [
+        'name' => [
+            'title' => '标识',
+        ],
+        'permissions' => [
+            'type' => 'relationship',
+            'title' => '权限',
+            'name_field' => 'name',
+        ],
+    ],
+
+    'filters' => [
+        'id' => [
+            'title' => 'ID',
+        ],
+        'name' => [
+            'title' => '标识',
+        ]
+    ],
+
+    // 新建和编辑时的表单验证规则
+    'rules' => [
+        'name' => 'required|max:15|unique:roles,name',
+    ],
+
+    // 表单验证错误时定制错误消息
+    'messages' => [
+        'name.required' => '标识不能为空',
+        'name.unique' => '标识已存在',
+    ]
+];