mirror of
https://devops.lemonos.cn/lawson/FendxPHP.git
synced 2026-06-15 23:12:49 +08:00
feat(database): 添加用户角色权限系统及相关监控功能
- 创建用户表(users)包含基本信息和认证字段 - 创建角色表(roles)用于权限控制 - 创建权限表(permissions)定义系统权限 - 创建用户角色关联表(user_roles)建立用户与角色关系 - 创建角色权限关联表(role_permissions)建立角色与权限关系 - 创建迁移记录表(migrations)追踪数据库变更 - 添加AdminController提供管理员面板功能 - 实现系统监控、配置管理、缓存清理等功能 - 添加AOP切面编程支持的各种通知类型 - 实现告警管理AlertManager支持多渠道告警 - 添加文档注解接口规范
This commit is contained in:
220
database/init.sql
Normal file
220
database/init.sql
Normal file
@@ -0,0 +1,220 @@
|
||||
-- FendxPHP 数据库初始化脚本
|
||||
-- 创建数据库和基础表结构
|
||||
|
||||
-- 创建数据库
|
||||
CREATE DATABASE IF NOT EXISTS `fendx_php`
|
||||
CHARACTER SET utf8mb4
|
||||
COLLATE utf8mb4_unicode_ci;
|
||||
|
||||
USE `fendx_php`;
|
||||
|
||||
-- 创建用户表
|
||||
CREATE TABLE IF NOT EXISTS `users` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '用户ID',
|
||||
`username` varchar(50) NOT NULL COMMENT '用户名',
|
||||
`email` varchar(100) NOT NULL COMMENT '邮箱',
|
||||
`password` varchar(255) NOT NULL COMMENT '密码',
|
||||
`nickname` varchar(50) DEFAULT NULL COMMENT '昵称',
|
||||
`avatar` varchar(255) DEFAULT NULL COMMENT '头像',
|
||||
`phone` varchar(20) DEFAULT NULL COMMENT '手机号',
|
||||
`gender` enum('male','female','other') DEFAULT NULL COMMENT '性别',
|
||||
`birthday` date DEFAULT NULL COMMENT '生日',
|
||||
`bio` text COMMENT '个人简介',
|
||||
`status` varchar(20) DEFAULT 'active' COMMENT '状态: active, inactive, banned',
|
||||
`email_verified` tinyint(1) DEFAULT 0 COMMENT '邮箱是否验证',
|
||||
`phone_verified` tinyint(1) DEFAULT 0 COMMENT '手机是否验证',
|
||||
`email_verified_at` timestamp NULL DEFAULT NULL COMMENT '邮箱验证时间',
|
||||
`phone_verified_at` timestamp NULL DEFAULT NULL COMMENT '手机验证时间',
|
||||
`last_login_at` timestamp NULL DEFAULT NULL COMMENT '最后登录时间',
|
||||
`last_login_ip` varchar(45) DEFAULT NULL COMMENT '最后登录IP',
|
||||
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `users_username_unique` (`username`),
|
||||
UNIQUE KEY `users_email_unique` (`email`),
|
||||
KEY `users_username_index` (`username`),
|
||||
KEY `users_email_index` (`email`),
|
||||
KEY `users_status_index` (`status`),
|
||||
KEY `users_created_at_index` (`created_at`),
|
||||
KEY `users_last_login_at_index` (`last_login_at`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
|
||||
|
||||
-- 创建角色表
|
||||
CREATE TABLE IF NOT EXISTS `roles` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '角色ID',
|
||||
`name` varchar(50) NOT NULL COMMENT '角色名称',
|
||||
`display_name` varchar(100) NOT NULL COMMENT '显示名称',
|
||||
`description` text COMMENT '角色描述',
|
||||
`guard_name` varchar(50) DEFAULT 'web' COMMENT '守卫名称',
|
||||
`is_active` tinyint(1) DEFAULT 1 COMMENT '是否激活',
|
||||
`sort_order` int(11) DEFAULT 0 COMMENT '排序',
|
||||
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `roles_name_unique` (`name`),
|
||||
KEY `roles_name_index` (`name`),
|
||||
KEY `roles_guard_name_index` (`guard_name`),
|
||||
KEY `roles_is_active_index` (`is_active`),
|
||||
KEY `roles_sort_order_index` (`sort_order`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色表';
|
||||
|
||||
-- 创建权限表
|
||||
CREATE TABLE IF NOT EXISTS `permissions` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '权限ID',
|
||||
`name` varchar(100) NOT NULL COMMENT '权限名称',
|
||||
`display_name` varchar(100) NOT NULL COMMENT '显示名称',
|
||||
`description` text COMMENT '权限描述',
|
||||
`guard_name` varchar(50) DEFAULT 'web' COMMENT '守卫名称',
|
||||
`group_name` varchar(50) DEFAULT NULL COMMENT '权限分组',
|
||||
`is_active` tinyint(1) DEFAULT 1 COMMENT '是否激活',
|
||||
`sort_order` int(11) DEFAULT 0 COMMENT '排序',
|
||||
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
`updated_at` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `permissions_name_unique` (`name`),
|
||||
KEY `permissions_name_index` (`name`),
|
||||
KEY `permissions_guard_name_index` (`guard_name`),
|
||||
KEY `permissions_group_name_index` (`group_name`),
|
||||
KEY `permissions_is_active_index` (`is_active`),
|
||||
KEY `permissions_sort_order_index` (`sort_order`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='权限表';
|
||||
|
||||
-- 创建用户角色关联表
|
||||
CREATE TABLE IF NOT EXISTS `user_roles` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`user_id` bigint(20) unsigned NOT NULL COMMENT '用户ID',
|
||||
`role_id` bigint(20) unsigned NOT NULL COMMENT '角色ID',
|
||||
`guard_name` varchar(50) DEFAULT 'web' COMMENT '守卫名称',
|
||||
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `user_roles_unique` (`user_id`,`role_id`,`guard_name`),
|
||||
KEY `user_roles_user_id_index` (`user_id`),
|
||||
KEY `user_roles_role_id_index` (`role_id`),
|
||||
KEY `user_roles_guard_name_index` (`guard_name`),
|
||||
CONSTRAINT `user_roles_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
|
||||
CONSTRAINT `user_roles_role_id_foreign` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户角色关联表';
|
||||
|
||||
-- 创建角色权限关联表
|
||||
CREATE TABLE IF NOT EXISTS `role_permissions` (
|
||||
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`role_id` bigint(20) unsigned NOT NULL COMMENT '角色ID',
|
||||
`permission_id` bigint(20) unsigned NOT NULL COMMENT '权限ID',
|
||||
`guard_name` varchar(50) DEFAULT 'web' COMMENT '守卫名称',
|
||||
`created_at` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `role_permissions_unique` (`role_id`,`permission_id`,`guard_name`),
|
||||
KEY `role_permissions_role_id_index` (`role_id`),
|
||||
KEY `role_permissions_permission_id_index` (`permission_id`),
|
||||
KEY `role_permissions_guard_name_index` (`guard_name`),
|
||||
CONSTRAINT `role_permissions_role_id_foreign` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE,
|
||||
CONSTRAINT `role_permissions_permission_id_foreign` FOREIGN KEY (`permission_id`) REFERENCES `permissions` (`id`) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色权限关联表';
|
||||
|
||||
-- 创建迁移记录表
|
||||
CREATE TABLE IF NOT EXISTS `migrations` (
|
||||
`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
|
||||
`migration` varchar(255) NOT NULL COMMENT '迁移文件名',
|
||||
`batch` int(11) NOT NULL COMMENT '批次号',
|
||||
`ran_at` timestamp DEFAULT CURRENT_TIMESTAMP COMMENT '执行时间',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `migrations_migration_index` (`migration`),
|
||||
KEY `migrations_batch_index` (`batch`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='迁移记录表';
|
||||
|
||||
-- 插入基础角色数据
|
||||
INSERT INTO `roles` (`name`, `display_name`, `description`, `guard_name`, `is_active`, `sort_order`) VALUES
|
||||
('super_admin', '超级管理员', '系统超级管理员,拥有所有权限', 'web', 1, 1),
|
||||
('admin', '管理员', '系统管理员,拥有大部分管理权限', 'web', 1, 2),
|
||||
('moderator', '版主', '内容管理员,负责内容审核和管理', 'web', 1, 3),
|
||||
('user', '普通用户', '普通注册用户', 'web', 1, 4),
|
||||
('guest', '访客', '未登录访客', 'web', 1, 5);
|
||||
|
||||
-- 插入基础权限数据
|
||||
INSERT INTO `permissions` (`name`, `display_name`, `group_name`, `guard_name`, `is_active`, `sort_order`) VALUES
|
||||
-- 用户管理权限
|
||||
('user.list', '查看用户列表', '用户管理', 'web', 1, 1),
|
||||
('user.create', '创建用户', '用户管理', 'web', 1, 2),
|
||||
('user.edit', '编辑用户', '用户管理', 'web', 1, 3),
|
||||
('user.delete', '删除用户', '用户管理', 'web', 1, 4),
|
||||
('user.view', '查看用户详情', '用户管理', 'web', 1, 5),
|
||||
|
||||
-- 角色管理权限
|
||||
('role.list', '查看角色列表', '角色管理', 'web', 1, 1),
|
||||
('role.create', '创建角色', '角色管理', 'web', 1, 2),
|
||||
('role.edit', '编辑角色', '角色管理', 'web', 1, 3),
|
||||
('role.delete', '删除角色', '角色管理', 'web', 1, 4),
|
||||
('role.assign', '分配角色', '角色管理', 'web', 1, 5),
|
||||
|
||||
-- 权限管理权限
|
||||
('permission.list', '查看权限列表', '权限管理', 'web', 1, 1),
|
||||
('permission.create', '创建权限', '权限管理', 'web', 1, 2),
|
||||
('permission.edit', '编辑权限', '权限管理', 'web', 1, 3),
|
||||
('permission.delete', '删除权限', '权限管理', 'web', 1, 4),
|
||||
|
||||
-- 内容管理权限
|
||||
('content.list', '查看内容列表', '内容管理', 'web', 1, 1),
|
||||
('content.create', '创建内容', '内容管理', 'web', 1, 2),
|
||||
('content.edit', '编辑内容', '内容管理', 'web', 1, 3),
|
||||
('content.delete', '删除内容', '内容管理', 'web', 1, 4),
|
||||
('content.publish', '发布内容', '内容管理', 'web', 1, 5),
|
||||
('content.audit', '审核内容', '内容管理', 'web', 1, 6),
|
||||
|
||||
-- 系统管理权限
|
||||
('system.config', '系统配置', '系统管理', 'web', 1, 1),
|
||||
('system.log', '查看系统日志', '系统管理', 'web', 1, 2),
|
||||
('system.monitor', '系统监控', '系统管理', 'web', 1, 3),
|
||||
('system.backup', '数据备份', '系统管理', 'web', 1, 4),
|
||||
('system.restore', '数据恢复', '系统管理', 'web', 1, 5),
|
||||
|
||||
-- API权限
|
||||
('api.access', 'API访问', 'API管理', 'web', 1, 1),
|
||||
('api.create', 'API创建', 'API管理', 'web', 1, 2),
|
||||
('api.update', 'API更新', 'API管理', 'web', 1, 3),
|
||||
('api.delete', 'API删除', 'API管理', 'web', 1, 4);
|
||||
|
||||
-- 插入默认管理员用户
|
||||
INSERT INTO `users` (`username`, `email`, `password`, `nickname`, `phone`, `gender`, `bio`, `status`, `email_verified`, `phone_verified`, `email_verified_at`, `phone_verified_at`, `last_login_at`, `last_login_ip`) VALUES
|
||||
('admin', 'admin@fendx.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', '系统管理员', '13800138000', 'other', '系统默认管理员账号', 'active', 1, 1, NOW(), NOW(), NOW(), '127.0.0.1');
|
||||
|
||||
-- 分配超级管理员角色给admin用户
|
||||
INSERT INTO `user_roles` (`user_id`, `role_id`, `guard_name`)
|
||||
SELECT u.id, r.id, 'web'
|
||||
FROM users u, roles r
|
||||
WHERE u.username = 'admin' AND r.name = 'super_admin';
|
||||
|
||||
-- 给超级管理员分配所有权限
|
||||
INSERT INTO `role_permissions` (`role_id`, `permission_id`, `guard_name`)
|
||||
SELECT r.id, p.id, 'web'
|
||||
FROM roles r, permissions p
|
||||
WHERE r.name = 'super_admin';
|
||||
|
||||
-- 插入迁移记录
|
||||
INSERT INTO `migrations` (`migration`, `batch`) VALUES
|
||||
('2024_01_15_000001_create_users_table', 1),
|
||||
('2024_01_15_000002_create_roles_table', 1),
|
||||
('2024_01_15_000003_create_permissions_table', 1),
|
||||
('2024_01_15_000004_create_user_roles_table', 1),
|
||||
('2024_01_15_000005_create_role_permissions_table', 1),
|
||||
('2024_01_15_000006_create_migrations_table', 1);
|
||||
|
||||
-- 创建测试用户
|
||||
INSERT INTO `users` (`username`, `email`, `password`, `nickname`, `phone`, `gender`, `bio`, `status`, `email_verified`, `phone_verified`, `email_verified_at`, `phone_verified_at`, `last_login_at`, `last_login_ip`) VALUES
|
||||
('test_user', 'test@fendx.com', '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', '测试用户', '13800138001', 'male', '这是一个测试用户账号', 'active', 1, 0, NOW(), NULL, NOW(), '127.0.0.1');
|
||||
|
||||
-- 分配普通用户角色给测试用户
|
||||
INSERT INTO `user_roles` (`user_id`, `role_id`, `guard_name`)
|
||||
SELECT u.id, r.id, 'web'
|
||||
FROM users u, roles r
|
||||
WHERE u.username = 'test_user' AND r.name = 'user';
|
||||
|
||||
-- 给普通用户分配基础权限
|
||||
INSERT INTO `role_permissions` (`role_id`, `permission_id`, `guard_name`)
|
||||
SELECT r.id, p.id, 'web'
|
||||
FROM roles r, permissions p
|
||||
WHERE r.name = 'user' AND p.name IN ('user.view', 'content.list', 'content.create', 'content.edit', 'api.access');
|
||||
|
||||
-- 输出初始化完成信息
|
||||
SELECT 'FendxPHP 数据库初始化完成!' as message;
|
||||
SELECT '默认管理员账号: admin / password' as admin_info;
|
||||
SELECT '测试用户账号: test_user / password' as test_info;
|
||||
48
database/migrations/2024_01_15_000001_create_users_table.php
Normal file
48
database/migrations/2024_01_15_000001_create_users_table.php
Normal file
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fendx\Database\Schema\Schema;
|
||||
use Fendx\Database\Migration;
|
||||
|
||||
/**
|
||||
* 创建用户表
|
||||
*/
|
||||
class CreateUsersTable extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('users', function (Schema\Table $table) {
|
||||
$table->id('id')->primary()->autoIncrement();
|
||||
$table->string('username', 50)->unique()->comment('用户名');
|
||||
$table->string('email', 100)->unique()->comment('邮箱');
|
||||
$table->string('password', 255)->comment('密码');
|
||||
$table->string('nickname', 50)->nullable()->comment('昵称');
|
||||
$table->string('avatar', 255)->nullable()->comment('头像');
|
||||
$table->string('phone', 20)->nullable()->comment('手机号');
|
||||
$table->enum('gender', ['male', 'female', 'other'])->nullable()->comment('性别');
|
||||
$table->date('birthday')->nullable()->comment('生日');
|
||||
$table->text('bio')->nullable()->comment('个人简介');
|
||||
$table->string('status', 20)->default('active')->comment('状态: active, inactive, banned');
|
||||
$table->boolean('email_verified')->default(false)->comment('邮箱是否验证');
|
||||
$table->boolean('phone_verified')->default(false)->comment('手机是否验证');
|
||||
$table->timestamp('email_verified_at')->nullable()->comment('邮箱验证时间');
|
||||
$table->timestamp('phone_verified_at')->nullable()->comment('手机验证时间');
|
||||
$table->timestamp('last_login_at')->nullable()->comment('最后登录时间');
|
||||
$table->string('last_login_ip', 45)->nullable()->comment('最后登录IP');
|
||||
$table->timestamp('created_at')->useCurrent()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->useCurrent()->useCurrentOnUpdate()->comment('更新时间');
|
||||
|
||||
// 索引
|
||||
$table->index('username');
|
||||
$table->index('email');
|
||||
$table->index('status');
|
||||
$table->index('created_at');
|
||||
$table->index('last_login_at');
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('users');
|
||||
}
|
||||
}
|
||||
37
database/migrations/2024_01_15_000002_create_roles_table.php
Normal file
37
database/migrations/2024_01_15_000002_create_roles_table.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fendx\Database\Schema\Schema;
|
||||
use Fendx\Database\Migration;
|
||||
|
||||
/**
|
||||
* 创建角色表
|
||||
*/
|
||||
class CreateRolesTable extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('roles', function (Schema\Table $table) {
|
||||
$table->id('id')->primary()->autoIncrement();
|
||||
$table->string('name', 50)->unique()->comment('角色名称');
|
||||
$table->string('display_name', 100)->comment('显示名称');
|
||||
$table->text('description')->nullable()->comment('角色描述');
|
||||
$table->string('guard_name', 50)->default('web')->comment('守卫名称');
|
||||
$table->boolean('is_active')->default(true)->comment('是否激活');
|
||||
$table->integer('sort_order')->default(0)->comment('排序');
|
||||
$table->timestamp('created_at')->useCurrent()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->useCurrent()->useCurrentOnUpdate()->comment('更新时间');
|
||||
|
||||
// 索引
|
||||
$table->index('name');
|
||||
$table->index('guard_name');
|
||||
$table->index('is_active');
|
||||
$table->index('sort_order');
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('roles');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fendx\Database\Schema\Schema;
|
||||
use Fendx\Database\Migration;
|
||||
|
||||
/**
|
||||
* 创建权限表
|
||||
*/
|
||||
class CreatePermissionsTable extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('permissions', function (Schema\Table $table) {
|
||||
$table->id('id')->primary()->autoIncrement();
|
||||
$table->string('name', 100)->unique()->comment('权限名称');
|
||||
$table->string('display_name', 100)->comment('显示名称');
|
||||
$table->text('description')->nullable()->comment('权限描述');
|
||||
$table->string('guard_name', 50)->default('web')->comment('守卫名称');
|
||||
$table->string('group_name', 50)->nullable()->comment('权限分组');
|
||||
$table->boolean('is_active')->default(true)->comment('是否激活');
|
||||
$table->integer('sort_order')->default(0)->comment('排序');
|
||||
$table->timestamp('created_at')->useCurrent()->comment('创建时间');
|
||||
$table->timestamp('updated_at')->useCurrent()->useCurrentOnUpdate()->comment('更新时间');
|
||||
|
||||
// 索引
|
||||
$table->index('name');
|
||||
$table->index('guard_name');
|
||||
$table->index('group_name');
|
||||
$table->index('is_active');
|
||||
$table->index('sort_order');
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('permissions');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fendx\Database\Schema\Schema;
|
||||
use Fendx\Database\Migration;
|
||||
|
||||
/**
|
||||
* 创建用户角色关联表
|
||||
*/
|
||||
class CreateUserRolesTable extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('user_roles', function (Schema\Table $table) {
|
||||
$table->id('id')->primary()->autoIncrement();
|
||||
$table->unsignedBigInteger('user_id')->comment('用户ID');
|
||||
$table->unsignedBigInteger('role_id')->comment('角色ID');
|
||||
$table->string('guard_name', 50)->default('web')->comment('守卫名称');
|
||||
$table->timestamp('created_at')->useCurrent()->comment('创建时间');
|
||||
|
||||
// 外键约束
|
||||
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
|
||||
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
|
||||
|
||||
// 唯一索引
|
||||
$table->unique(['user_id', 'role_id', 'guard_name'], 'user_roles_unique');
|
||||
|
||||
// 索引
|
||||
$table->index('user_id');
|
||||
$table->index('role_id');
|
||||
$table->index('guard_name');
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('user_roles');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fendx\Database\Schema\Schema;
|
||||
use Fendx\Database\Migration;
|
||||
|
||||
/**
|
||||
* 创建角色权限关联表
|
||||
*/
|
||||
class CreateRolePermissionsTable extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('role_permissions', function (Schema\Table $table) {
|
||||
$table->id('id')->primary()->autoIncrement();
|
||||
$table->unsignedBigInteger('role_id')->comment('角色ID');
|
||||
$table->unsignedBigInteger('permission_id')->comment('权限ID');
|
||||
$table->string('guard_name', 50)->default('web')->comment('守卫名称');
|
||||
$table->timestamp('created_at')->useCurrent()->comment('创建时间');
|
||||
|
||||
// 外键约束
|
||||
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
|
||||
$table->foreign('permission_id')->references('id')->on('permissions')->onDelete('cascade');
|
||||
|
||||
// 唯一索引
|
||||
$table->unique(['role_id', 'permission_id', 'guard_name'], 'role_permissions_unique');
|
||||
|
||||
// 索引
|
||||
$table->index('role_id');
|
||||
$table->index('permission_id');
|
||||
$table->index('guard_name');
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('role_permissions');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fendx\Database\Schema\Schema;
|
||||
use Fendx\Database\Migration;
|
||||
|
||||
/**
|
||||
* 创建迁移记录表
|
||||
*/
|
||||
class CreateMigrationsTable extends Migration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
Schema::create('migrations', function (Schema\Table $table) {
|
||||
$table->id('id')->primary()->autoIncrement();
|
||||
$table->string('migration', 255)->comment('迁移文件名');
|
||||
$table->integer('batch')->comment('批次号');
|
||||
$table->timestamp('ran_at')->useCurrent()->comment('执行时间');
|
||||
|
||||
// 索引
|
||||
$table->index('migration');
|
||||
$table->index('batch');
|
||||
});
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
Schema::dropIfExists('migrations');
|
||||
}
|
||||
}
|
||||
59
database/seeds/DatabaseSeeder.php
Normal file
59
database/seeds/DatabaseSeeder.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fendx\Database\Seeder\Seeder;
|
||||
use Fendx\Database\Seeder\RoleSeeder;
|
||||
use Fendx\Database\Seeder\PermissionSeeder;
|
||||
use Fendx\Database\Seeder\UserSeeder;
|
||||
use Fendx\Database\Seeder\RolePermissionSeeder;
|
||||
use Fendx\Database\Seeder\UserRoleSeeder;
|
||||
|
||||
/**
|
||||
* 数据库种子数据主文件
|
||||
*/
|
||||
class DatabaseSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* 运行所有种子数据
|
||||
*/
|
||||
public function run(): void
|
||||
{
|
||||
$this->command->info('开始执行数据库种子数据...');
|
||||
|
||||
// 1. 创建角色数据
|
||||
$this->command->info('正在插入角色数据...');
|
||||
$this->call(RoleSeeder::class);
|
||||
|
||||
// 2. 创建权限数据
|
||||
$this->command->info('正在插入权限数据...');
|
||||
$this->call(PermissionSeeder::class);
|
||||
|
||||
// 3. 创建用户数据
|
||||
$this->command->info('正在插入用户数据...');
|
||||
$this->call(UserSeeder::class);
|
||||
|
||||
// 4. 创建角色权限关联数据
|
||||
$this->command->info('正在插入角色权限关联数据...');
|
||||
$this->call(RolePermissionSeeder::class);
|
||||
|
||||
// 5. 创建用户角色关联数据
|
||||
$this->command->info('正在插入用户角色关联数据...');
|
||||
$this->call(UserRoleSeeder::class);
|
||||
|
||||
$this->command->info('所有种子数据执行完成!');
|
||||
}
|
||||
|
||||
/**
|
||||
* 调用指定的种子类
|
||||
*/
|
||||
private function call(string $seederClass): void
|
||||
{
|
||||
if (class_exists($seederClass)) {
|
||||
$seeder = new $seederClass();
|
||||
$seeder->setCommand($this->command);
|
||||
$seeder->run();
|
||||
} else {
|
||||
$this->command->error("种子类不存在: {$seederClass}");
|
||||
}
|
||||
}
|
||||
}
|
||||
72
database/seeds/PermissionSeeder.php
Normal file
72
database/seeds/PermissionSeeder.php
Normal file
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fendx\Database\Seeder\Seeder;
|
||||
use Fendx\Database\Connection\DB;
|
||||
|
||||
/**
|
||||
* 权限种子数据
|
||||
*/
|
||||
class PermissionSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
$permissions = [
|
||||
// 用户管理权限
|
||||
['name' => 'user.list', 'display_name' => '查看用户列表', 'group_name' => '用户管理', 'sort_order' => 1],
|
||||
['name' => 'user.create', 'display_name' => '创建用户', 'group_name' => '用户管理', 'sort_order' => 2],
|
||||
['name' => 'user.edit', 'display_name' => '编辑用户', 'group_name' => '用户管理', 'sort_order' => 3],
|
||||
['name' => 'user.delete', 'display_name' => '删除用户', 'group_name' => '用户管理', 'sort_order' => 4],
|
||||
['name' => 'user.view', 'display_name' => '查看用户详情', 'group_name' => '用户管理', 'sort_order' => 5],
|
||||
|
||||
// 角色管理权限
|
||||
['name' => 'role.list', 'display_name' => '查看角色列表', 'group_name' => '角色管理', 'sort_order' => 1],
|
||||
['name' => 'role.create', 'display_name' => '创建角色', 'group_name' => '角色管理', 'sort_order' => 2],
|
||||
['name' => 'role.edit', 'display_name' => '编辑角色', 'group_name' => '角色管理', 'sort_order' => 3],
|
||||
['name' => 'role.delete', 'display_name' => '删除角色', 'group_name' => '角色管理', 'sort_order' => 4],
|
||||
['name' => 'role.assign', 'display_name' => '分配角色', 'group_name' => '角色管理', 'sort_order' => 5],
|
||||
|
||||
// 权限管理权限
|
||||
['name' => 'permission.list', 'display_name' => '查看权限列表', 'group_name' => '权限管理', 'sort_order' => 1],
|
||||
['name' => 'permission.create', 'display_name' => '创建权限', 'group_name' => '权限管理', 'sort_order' => 2],
|
||||
['name' => 'permission.edit', 'display_name' => '编辑权限', 'group_name' => '权限管理', 'sort_order' => 3],
|
||||
['name' => 'permission.delete', 'display_name' => '删除权限', 'group_name' => '权限管理', 'sort_order' => 4],
|
||||
|
||||
// 内容管理权限
|
||||
['name' => 'content.list', 'display_name' => '查看内容列表', 'group_name' => '内容管理', 'sort_order' => 1],
|
||||
['name' => 'content.create', 'display_name' => '创建内容', 'group_name' => '内容管理', 'sort_order' => 2],
|
||||
['name' => 'content.edit', 'display_name' => '编辑内容', 'group_name' => '内容管理', 'sort_order' => 3],
|
||||
['name' => 'content.delete', 'display_name' => '删除内容', 'group_name' => '内容管理', 'sort_order' => 4],
|
||||
['name' => 'content.publish', 'display_name' => '发布内容', 'group_name' => '内容管理', 'sort_order' => 5],
|
||||
['name' => 'content.audit', 'display_name' => '审核内容', 'group_name' => '内容管理', 'sort_order' => 6],
|
||||
|
||||
// 系统管理权限
|
||||
['name' => 'system.config', 'display_name' => '系统配置', 'group_name' => '系统管理', 'sort_order' => 1],
|
||||
['name' => 'system.log', 'display_name' => '查看系统日志', 'group_name' => '系统管理', 'sort_order' => 2],
|
||||
['name' => 'system.monitor', 'display_name' => '系统监控', 'group_name' => '系统管理', 'sort_order' => 3],
|
||||
['name' => 'system.backup', 'display_name' => '数据备份', 'group_name' => '系统管理', 'sort_order' => 4],
|
||||
['name' => 'system.restore', 'display_name' => '数据恢复', 'group_name' => '系统管理', 'sort_order' => 5],
|
||||
|
||||
// API权限
|
||||
['name' => 'api.access', 'display_name' => 'API访问', 'group_name' => 'API管理', 'sort_order' => 1],
|
||||
['name' => 'api.create', 'display_name' => 'API创建', 'group_name' => 'API管理', 'sort_order' => 2],
|
||||
['name' => 'api.update', 'display_name' => 'API更新', 'group_name' => 'API管理', 'sort_order' => 3],
|
||||
['name' => 'api.delete', 'display_name' => 'API删除', 'group_name' => 'API管理', 'sort_order' => 4],
|
||||
];
|
||||
|
||||
foreach ($permissions as $permission) {
|
||||
DB::table('permissions')->insert([
|
||||
'name' => $permission['name'],
|
||||
'display_name' => $permission['display_name'],
|
||||
'group_name' => $permission['group_name'],
|
||||
'guard_name' => 'web',
|
||||
'is_active' => true,
|
||||
'sort_order' => $permission['sort_order'],
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
]);
|
||||
}
|
||||
|
||||
$this->command->info('权限种子数据插入完成');
|
||||
}
|
||||
}
|
||||
121
database/seeds/RolePermissionSeeder.php
Normal file
121
database/seeds/RolePermissionSeeder.php
Normal file
@@ -0,0 +1,121 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fendx\Database\Seeder\Seeder;
|
||||
use Fendx\Database\Connection\DB;
|
||||
|
||||
/**
|
||||
* 角色权限关联种子数据
|
||||
*/
|
||||
class RolePermissionSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
// 获取角色和权限ID
|
||||
$roles = DB::table('roles')->pluck('id', 'name')->toArray();
|
||||
$permissions = DB::table('permissions')->pluck('id', 'name')->toArray();
|
||||
|
||||
$rolePermissions = [];
|
||||
|
||||
// 超级管理员拥有所有权限
|
||||
if (isset($roles['super_admin'])) {
|
||||
foreach ($permissions as $permissionId) {
|
||||
$rolePermissions[] = [
|
||||
'role_id' => $roles['super_admin'],
|
||||
'permission_id' => $permissionId,
|
||||
'guard_name' => 'web',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
// 管理员权限(除了系统管理中的敏感权限)
|
||||
if (isset($roles['admin'])) {
|
||||
$adminPermissions = [
|
||||
'user.list', 'user.create', 'user.edit', 'user.view',
|
||||
'role.list', 'role.create', 'role.edit', 'role.assign',
|
||||
'permission.list', 'permission.edit',
|
||||
'content.list', 'content.create', 'content.edit', 'content.publish', 'content.audit',
|
||||
'system.log', 'system.monitor',
|
||||
'api.access', 'api.create', 'api.update',
|
||||
];
|
||||
|
||||
foreach ($adminPermissions as $permissionName) {
|
||||
if (isset($permissions[$permissionName])) {
|
||||
$rolePermissions[] = [
|
||||
'role_id' => $roles['admin'],
|
||||
'permission_id' => $permissions[$permissionName],
|
||||
'guard_name' => 'web',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 版主权限(内容管理相关)
|
||||
if (isset($roles['moderator'])) {
|
||||
$moderatorPermissions = [
|
||||
'user.list', 'user.view',
|
||||
'content.list', 'content.create', 'content.edit', 'content.audit',
|
||||
'api.access',
|
||||
];
|
||||
|
||||
foreach ($moderatorPermissions as $permissionName) {
|
||||
if (isset($permissions[$permissionName])) {
|
||||
$rolePermissions[] = [
|
||||
'role_id' => $roles['moderator'],
|
||||
'permission_id' => $permissions[$permissionName],
|
||||
'guard_name' => 'web',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 普通用户权限(基础权限)
|
||||
if (isset($roles['user'])) {
|
||||
$userPermissions = [
|
||||
'user.view', // 查看自己的信息
|
||||
'content.list', 'content.create', 'content.edit', // 内容管理
|
||||
'api.access', // API访问
|
||||
];
|
||||
|
||||
foreach ($userPermissions as $permissionName) {
|
||||
if (isset($permissions[$permissionName])) {
|
||||
$rolePermissions[] = [
|
||||
'role_id' => $roles['user'],
|
||||
'permission_id' => $permissions[$permissionName],
|
||||
'guard_name' => 'web',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 访客权限(最基础的权限)
|
||||
if (isset($roles['guest'])) {
|
||||
$guestPermissions = [
|
||||
'content.list', // 查看公开内容
|
||||
'api.access', // 基础API访问
|
||||
];
|
||||
|
||||
foreach ($guestPermissions as $permissionName) {
|
||||
if (isset($permissions[$permissionName])) {
|
||||
$rolePermissions[] = [
|
||||
'role_id' => $roles['guest'],
|
||||
'permission_id' => $permissions[$permissionName],
|
||||
'guard_name' => 'web',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 批量插入角色权限关联
|
||||
if (!empty($rolePermissions)) {
|
||||
DB::table('role_permissions')->insert($rolePermissions);
|
||||
}
|
||||
|
||||
$this->command->info('角色权限关联种子数据插入完成');
|
||||
}
|
||||
}
|
||||
73
database/seeds/RoleSeeder.php
Normal file
73
database/seeds/RoleSeeder.php
Normal file
@@ -0,0 +1,73 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fendx\Database\Seeder\Seeder;
|
||||
use Fendx\Database\Connection\DB;
|
||||
|
||||
/**
|
||||
* 角色种子数据
|
||||
*/
|
||||
class RoleSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
$roles = [
|
||||
[
|
||||
'name' => 'super_admin',
|
||||
'display_name' => '超级管理员',
|
||||
'description' => '系统超级管理员,拥有所有权限',
|
||||
'guard_name' => 'web',
|
||||
'is_active' => true,
|
||||
'sort_order' => 1,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
[
|
||||
'name' => 'admin',
|
||||
'display_name' => '管理员',
|
||||
'description' => '系统管理员,拥有大部分管理权限',
|
||||
'guard_name' => 'web',
|
||||
'is_active' => true,
|
||||
'sort_order' => 2,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
[
|
||||
'name' => 'moderator',
|
||||
'display_name' => '版主',
|
||||
'description' => '内容管理员,负责内容审核和管理',
|
||||
'guard_name' => 'web',
|
||||
'is_active' => true,
|
||||
'sort_order' => 3,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
[
|
||||
'name' => 'user',
|
||||
'display_name' => '普通用户',
|
||||
'description' => '普通注册用户',
|
||||
'guard_name' => 'web',
|
||||
'is_active' => true,
|
||||
'sort_order' => 4,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
[
|
||||
'name' => 'guest',
|
||||
'display_name' => '访客',
|
||||
'description' => '未登录访客',
|
||||
'guard_name' => 'web',
|
||||
'is_active' => true,
|
||||
'sort_order' => 5,
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($roles as $role) {
|
||||
DB::table('roles')->insert($role);
|
||||
}
|
||||
|
||||
$this->command->info('角色种子数据插入完成');
|
||||
}
|
||||
}
|
||||
87
database/seeds/UserRoleSeeder.php
Normal file
87
database/seeds/UserRoleSeeder.php
Normal file
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fendx\Database\Seeder\Seeder;
|
||||
use Fendx\Database\Connection\DB;
|
||||
|
||||
/**
|
||||
* 用户角色关联种子数据
|
||||
*/
|
||||
class UserRoleSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
// 获取用户和角色ID
|
||||
$users = DB::table('users')->pluck('id', 'username')->toArray();
|
||||
$roles = DB::table('roles')->pluck('id', 'name')->toArray();
|
||||
|
||||
$userRoles = [];
|
||||
|
||||
// admin 用户 -> 超级管理员
|
||||
if (isset($users['admin']) && isset($roles['super_admin'])) {
|
||||
$userRoles[] = [
|
||||
'user_id' => $users['admin'],
|
||||
'role_id' => $roles['super_admin'],
|
||||
'guard_name' => 'web',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
}
|
||||
|
||||
// test_user 用户 -> 普通用户
|
||||
if (isset($users['test_user']) && isset($roles['user'])) {
|
||||
$userRoles[] = [
|
||||
'user_id' => $users['test_user'],
|
||||
'role_id' => $roles['user'],
|
||||
'guard_name' => 'web',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
}
|
||||
|
||||
// developer 用户 -> 管理员
|
||||
if (isset($users['developer']) && isset($roles['admin'])) {
|
||||
$userRoles[] = [
|
||||
'user_id' => $users['developer'],
|
||||
'role_id' => $roles['admin'],
|
||||
'guard_name' => 'web',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
}
|
||||
|
||||
// moderator 用户 -> 版主
|
||||
if (isset($users['moderator']) && isset($roles['moderator'])) {
|
||||
$userRoles[] = [
|
||||
'user_id' => $users['moderator'],
|
||||
'role_id' => $roles['moderator'],
|
||||
'guard_name' => 'web',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
}
|
||||
|
||||
// user001 用户 -> 普通用户
|
||||
if (isset($users['user001']) && isset($roles['user'])) {
|
||||
$userRoles[] = [
|
||||
'user_id' => $users['user001'],
|
||||
'role_id' => $roles['user'],
|
||||
'guard_name' => 'web',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
}
|
||||
|
||||
// user002 用户 -> 普通用户
|
||||
if (isset($users['user002']) && isset($roles['user'])) {
|
||||
$userRoles[] = [
|
||||
'user_id' => $users['user002'],
|
||||
'role_id' => $roles['user'],
|
||||
'guard_name' => 'web',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
];
|
||||
}
|
||||
|
||||
// 批量插入用户角色关联
|
||||
if (!empty($userRoles)) {
|
||||
DB::table('user_roles')->insert($userRoles);
|
||||
}
|
||||
|
||||
$this->command->info('用户角色关联种子数据插入完成');
|
||||
}
|
||||
}
|
||||
143
database/seeds/UserSeeder.php
Normal file
143
database/seeds/UserSeeder.php
Normal file
@@ -0,0 +1,143 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
use Fendx\Database\Seeder\Seeder;
|
||||
use Fendx\Database\Connection\DB;
|
||||
|
||||
/**
|
||||
* 用户种子数据
|
||||
*/
|
||||
class UserSeeder extends Seeder
|
||||
{
|
||||
public function run(): void
|
||||
{
|
||||
$users = [
|
||||
[
|
||||
'username' => 'admin',
|
||||
'email' => 'admin@fendx.com',
|
||||
'password' => password_hash('admin123', PASSWORD_DEFAULT),
|
||||
'nickname' => '系统管理员',
|
||||
'avatar' => null,
|
||||
'phone' => '13800138000',
|
||||
'gender' => 'other',
|
||||
'birthday' => null,
|
||||
'bio' => '系统默认管理员账号',
|
||||
'status' => 'active',
|
||||
'email_verified' => true,
|
||||
'phone_verified' => true,
|
||||
'email_verified_at' => date('Y-m-d H:i:s'),
|
||||
'phone_verified_at' => date('Y-m-d H:i:s'),
|
||||
'last_login_at' => date('Y-m-d H:i:s'),
|
||||
'last_login_ip' => '127.0.0.1',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
[
|
||||
'username' => 'test_user',
|
||||
'email' => 'test@fendx.com',
|
||||
'password' => password_hash('test123', PASSWORD_DEFAULT),
|
||||
'nickname' => '测试用户',
|
||||
'avatar' => null,
|
||||
'phone' => '13800138001',
|
||||
'gender' => 'male',
|
||||
'birthday' => '1990-01-01',
|
||||
'bio' => '这是一个测试用户账号',
|
||||
'status' => 'active',
|
||||
'email_verified' => true,
|
||||
'phone_verified' => false,
|
||||
'email_verified_at' => date('Y-m-d H:i:s'),
|
||||
'phone_verified_at' => null,
|
||||
'last_login_at' => date('Y-m-d H:i:s'),
|
||||
'last_login_ip' => '127.0.0.1',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
[
|
||||
'username' => 'developer',
|
||||
'email' => 'dev@fendx.com',
|
||||
'password' => password_hash('dev123', PASSWORD_DEFAULT),
|
||||
'nickname' => '开发者',
|
||||
'avatar' => null,
|
||||
'phone' => '13800138002',
|
||||
'gender' => 'male',
|
||||
'birthday' => '1985-05-15',
|
||||
'bio' => '系统开发者账号',
|
||||
'status' => 'active',
|
||||
'email_verified' => true,
|
||||
'phone_verified' => true,
|
||||
'email_verified_at' => date('Y-m-d H:i:s'),
|
||||
'phone_verified_at' => date('Y-m-d H:i:s'),
|
||||
'last_login_at' => date('Y-m-d H:i:s'),
|
||||
'last_login_ip' => '127.0.0.1',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
[
|
||||
'username' => 'moderator',
|
||||
'email' => 'mod@fendx.com',
|
||||
'password' => password_hash('mod123', PASSWORD_DEFAULT),
|
||||
'nickname' => '内容管理员',
|
||||
'avatar' => null,
|
||||
'phone' => '13800138003',
|
||||
'gender' => 'female',
|
||||
'birthday' => '1992-08-20',
|
||||
'bio' => '负责内容审核和管理的版主',
|
||||
'status' => 'active',
|
||||
'email_verified' => true,
|
||||
'phone_verified' => false,
|
||||
'email_verified_at' => date('Y-m-d H:i:s'),
|
||||
'phone_verified_at' => null,
|
||||
'last_login_at' => date('Y-m-d H:i:s'),
|
||||
'last_login_ip' => '127.0.0.1',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
[
|
||||
'username' => 'user001',
|
||||
'email' => 'user001@fendx.com',
|
||||
'password' => password_hash('user123', PASSWORD_DEFAULT),
|
||||
'nickname' => '普通用户1',
|
||||
'avatar' => null,
|
||||
'phone' => '13800138004',
|
||||
'gender' => 'male',
|
||||
'birthday' => '1995-03-10',
|
||||
'bio' => '普通注册用户',
|
||||
'status' => 'active',
|
||||
'email_verified' => true,
|
||||
'phone_verified' => false,
|
||||
'email_verified_at' => date('Y-m-d H:i:s'),
|
||||
'phone_verified_at' => null,
|
||||
'last_login_at' => date('Y-m-d H:i:s'),
|
||||
'last_login_ip' => '127.0.0.1',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
[
|
||||
'username' => 'user002',
|
||||
'email' => 'user002@fendx.com',
|
||||
'password' => password_hash('user123', PASSWORD_DEFAULT),
|
||||
'nickname' => '普通用户2',
|
||||
'avatar' => null,
|
||||
'phone' => '13800138005',
|
||||
'gender' => 'female',
|
||||
'birthday' => '1993-11-25',
|
||||
'bio' => '普通注册用户',
|
||||
'status' => 'active',
|
||||
'email_verified' => true,
|
||||
'phone_verified' => false,
|
||||
'email_verified_at' => date('Y-m-d H:i:s'),
|
||||
'phone_verified_at' => null,
|
||||
'last_login_at' => date('Y-m-d H:i:s'),
|
||||
'last_login_ip' => '127.0.0.1',
|
||||
'created_at' => date('Y-m-d H:i:s'),
|
||||
'updated_at' => date('Y-m-d H:i:s'),
|
||||
],
|
||||
];
|
||||
|
||||
foreach ($users as $user) {
|
||||
DB::table('users')->insert($user);
|
||||
}
|
||||
|
||||
$this->command->info('用户种子数据插入完成');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user