208 lines
7.0 KiB
PHP
208 lines
7.0 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace app\admin\controller;
|
||
|
|
|
||
|
|
use app\admin\model\Admin;
|
||
|
|
use app\util\Util;
|
||
|
|
use Illuminate\Support\Facades\Validator;
|
||
|
|
use support\Request;
|
||
|
|
use app\model\User;
|
||
|
|
use app\admin\model\Role;
|
||
|
|
|
||
|
|
class AdminController
|
||
|
|
{
|
||
|
|
public function list(Request $request,)
|
||
|
|
{
|
||
|
|
$page = $request->input('page', 1);
|
||
|
|
$perPage = $request->input('per_page', 10);
|
||
|
|
$admin = Admin::with('roles')->paginate($perPage, ['*'], 'page', $page);
|
||
|
|
return Util::success($admin);
|
||
|
|
}
|
||
|
|
// 获取用户角色列表
|
||
|
|
public function roles(Request $request, $id)
|
||
|
|
{
|
||
|
|
$admin = Admin::with('roles')->findOrFail($id);
|
||
|
|
$allRoles = Role::all();
|
||
|
|
|
||
|
|
$res = [
|
||
|
|
'admin' => $admin,
|
||
|
|
'all_roles' => $allRoles,
|
||
|
|
'assigned_roles' => $admin->roles->pluck('id')->toArray()
|
||
|
|
];
|
||
|
|
return Util::success($res);
|
||
|
|
}
|
||
|
|
|
||
|
|
// 更新用户角色
|
||
|
|
public function updateRoles(Request $request, $id)
|
||
|
|
{
|
||
|
|
// $request->validate([
|
||
|
|
// 'roles' => 'required|array',
|
||
|
|
// 'roles.*' => 'exists:roles,id'
|
||
|
|
// ]);
|
||
|
|
// 验证规则
|
||
|
|
$rules = [
|
||
|
|
'roles' => 'required|array',
|
||
|
|
'roles.*' => 'exists:roles,id'
|
||
|
|
];
|
||
|
|
|
||
|
|
// 自定义错误消息(可选)
|
||
|
|
$messages = [
|
||
|
|
'roles.required' => '角色不能为空',
|
||
|
|
'roles.exists' => '角色id不存在',
|
||
|
|
];
|
||
|
|
|
||
|
|
// 执行验证
|
||
|
|
$validator = Validator::make($request->all(), $rules, $messages);
|
||
|
|
|
||
|
|
$admin = Admin::findOrFail($id);
|
||
|
|
|
||
|
|
$res = $admin->roles()->sync($request->input('roles'));
|
||
|
|
|
||
|
|
return Util::success($res,'角色更新成功');
|
||
|
|
}
|
||
|
|
|
||
|
|
// 创建管理员
|
||
|
|
public function create(Request $request)
|
||
|
|
{
|
||
|
|
$rules = [
|
||
|
|
'username' => ['required', 'string', 'min:5', 'regex:/^[a-zA-Z0-9\-\_\.]+$/'],
|
||
|
|
'password' => 'required|string|min:6',
|
||
|
|
'nickname' => 'required|string',
|
||
|
|
'email' => 'nullable|email',
|
||
|
|
'status' => 'in:0,1'
|
||
|
|
];
|
||
|
|
|
||
|
|
$messages = [
|
||
|
|
'username.required' => '账号不能为空',
|
||
|
|
'username.min' => '账号长度不能少于5位',
|
||
|
|
'username.regex' => '账号只能包含字母、数字、下划线、连字符和点号',
|
||
|
|
'password.required' => '密码不能为空',
|
||
|
|
'password.min' => '密码长度不能少于6位',
|
||
|
|
'nickname.required' => '姓名不能为空',
|
||
|
|
'email.email' => '邮箱格式不正确',
|
||
|
|
'status.in' => '状态值不正确'
|
||
|
|
];
|
||
|
|
|
||
|
|
$validator = Validator::make($request->all(), $rules, $messages);
|
||
|
|
if ($validator->fails()) {
|
||
|
|
return Util::fail('',$validator->errors()->first());
|
||
|
|
}
|
||
|
|
|
||
|
|
// 检查用户名是否已存在
|
||
|
|
if (Admin::where('username', $request->input('username'))->exists()) {
|
||
|
|
return Util::fail('','账号已存在');
|
||
|
|
}
|
||
|
|
|
||
|
|
// 检查邮箱是否已存在
|
||
|
|
if ($request->input('email') && Admin::where('email', $request->input('email'))->exists()) {
|
||
|
|
return Util::fail('','邮箱已存在');
|
||
|
|
}
|
||
|
|
|
||
|
|
$admin = new Admin();
|
||
|
|
$admin->username = $request->input('username');
|
||
|
|
$admin->password = password_hash($request->input('password'), PASSWORD_DEFAULT);
|
||
|
|
$admin->nickname = $request->input('nickname');
|
||
|
|
$admin->email = $request->input('email', null);
|
||
|
|
$admin->status = $request->input('status', 1);
|
||
|
|
$admin->save();
|
||
|
|
|
||
|
|
if ($request->input('roles')) {
|
||
|
|
$res = $admin->roles()->sync($request->input('roles'));
|
||
|
|
}
|
||
|
|
|
||
|
|
return Util::success($admin, '管理员创建成功');
|
||
|
|
}
|
||
|
|
|
||
|
|
// 修改管理员信息
|
||
|
|
public function update(Request $request, $id)
|
||
|
|
{
|
||
|
|
$admin = Admin::findOrFail($id);
|
||
|
|
|
||
|
|
$rules = [
|
||
|
|
'password' => ['string', 'min:6', 'regex:/^[a-zA-Z0-9\-\_\.]+$/'],
|
||
|
|
'nickname' => 'string',
|
||
|
|
'email' => 'email',
|
||
|
|
'status' => 'in:0,1',
|
||
|
|
'old_password' => 'required_with:password|string',
|
||
|
|
'avatar' => 'string',
|
||
|
|
'mobile' => 'string'
|
||
|
|
];
|
||
|
|
|
||
|
|
$messages = [
|
||
|
|
'password.min' => '密码长度不能少于6位',
|
||
|
|
'password.regex' => '密码只能包含字母、数字、下划线、连字符和点号',
|
||
|
|
'email.email' => '邮箱格式不正确',
|
||
|
|
'status.in' => '状态值不正确',
|
||
|
|
'old_password.required_with' => '请提供旧密码',
|
||
|
|
'old_password.string' => '旧密码格式不正确'
|
||
|
|
];
|
||
|
|
|
||
|
|
$validator = Validator::make($request->all(), $rules, $messages);
|
||
|
|
if ($validator->fails()) {
|
||
|
|
return Util::fail('',$validator->errors()->first());
|
||
|
|
}
|
||
|
|
|
||
|
|
// 检查邮箱是否已存在(排除当前管理员)
|
||
|
|
if ($request->input('email') && Admin::where('email', $request->input('email'))->where('id', '!=', $id)->exists()) {
|
||
|
|
return Util::fail('','邮箱已存在');
|
||
|
|
}
|
||
|
|
|
||
|
|
// 准备要更新的数据
|
||
|
|
$updateData = $request->only(['nickname', 'email', 'status', 'avatar', 'mobile']);
|
||
|
|
|
||
|
|
// 如果修改密码,验证旧密码
|
||
|
|
if ($request->input('password')) {
|
||
|
|
if (!$request->input('old_password')) {
|
||
|
|
return Util::fail('','请提供旧密码');
|
||
|
|
}
|
||
|
|
if (!password_verify($request->input('old_password'), $admin->password)) {
|
||
|
|
return Util::fail('','旧密码不正确');
|
||
|
|
}
|
||
|
|
$updateData['password'] = password_hash($request->input('password'), PASSWORD_DEFAULT);
|
||
|
|
}
|
||
|
|
|
||
|
|
// 只填充前端传递的字段
|
||
|
|
$admin->fill($updateData);
|
||
|
|
$admin->save();
|
||
|
|
|
||
|
|
return Util::success($admin, '管理员信息更新成功');
|
||
|
|
}
|
||
|
|
|
||
|
|
// 禁用/启用管理员
|
||
|
|
public function toggleStatus(Request $request, $id)
|
||
|
|
{
|
||
|
|
$admin = Admin::findOrFail($id);
|
||
|
|
$admin->status = $admin->status == 1 ? 0 : 1;
|
||
|
|
$admin->save();
|
||
|
|
|
||
|
|
$statusText = $admin->status == 1 ? '启用' : '禁用';
|
||
|
|
return Util::success($admin, "管理员{$statusText}成功");
|
||
|
|
}
|
||
|
|
|
||
|
|
// 重置管理员密码
|
||
|
|
public function resetPassword(Request $request, $id)
|
||
|
|
{
|
||
|
|
$rules = [
|
||
|
|
'new_password' => 'required|string|min:6',
|
||
|
|
// 'confirm_password' => 'required|string|same:new_password'
|
||
|
|
];
|
||
|
|
|
||
|
|
$messages = [
|
||
|
|
'new_password.required' => '新密码不能为空',
|
||
|
|
'new_password.min' => '新密码长度不能少于6位',
|
||
|
|
// 'confirm_password.required' => '确认密码不能为空',
|
||
|
|
// 'confirm_password.same' => '两次输入的密码不一致'
|
||
|
|
];
|
||
|
|
|
||
|
|
$validator = Validator::make($request->all(), $rules, $messages);
|
||
|
|
if ($validator->fails()) {
|
||
|
|
return Util::fail('',$validator->errors()->first());
|
||
|
|
}
|
||
|
|
|
||
|
|
$admin = Admin::findOrFail($id);
|
||
|
|
$admin->password = password_hash($request->input('new_password'), PASSWORD_DEFAULT);
|
||
|
|
$admin->save();
|
||
|
|
|
||
|
|
return Util::success(null, '密码重置成功');
|
||
|
|
}
|
||
|
|
}
|