系统功能说明
这个角色权限管理系统实现了以下核心功能:
1、用户 - 角色 - 权限三级架构:
- 一个用户可以拥有多个角色
- 一个角色可以拥有多个权限
- 权限可以有父子关系,形成权限树
2、权限验证机制:
- 通过中间件实现权限检
- 支持在路由中指定所需权限
- 提供服务类方便在代码中检查权限
3、管理功能:
- 用户管理:查看用户列表、分配角色
- 角色管理:查看角色列表、分配权限
- 权限管理:查看权限树结构
使用方法
首先执行提供的 SQL 脚本创建数据库表并插入测试数据
将代码文件放入 ThinkPHP8 项目对应目录
访问系统,使用以下测试账号登录:
1. 管理员:admin/123456
2. 编辑:editor/123456
3. 访客:viewer/123456
ThinkPHP8 实现代码
下面是完整的角色权限管理系统实现,包括模型、控制器、中间件和服务类

文件 \app\controller\AuthController.php
<?php
namespace app\controller;
// 文件目录 \app\controller\AuthController.php
use app\model\Permission;
use app\model\Role;
use app\model\User;
use app\service\AuthService;
use think\facade\View;
use think\Request;
class AuthController extends BaseController
{
protected $authService;
public function __construct(AuthService $authService)
{
$this->authService = $authService;
}
/**
* 登录页面
*/
public function login()
{
if ($this->authService->getUserInfo()) {
return redirect((string)url('/dashboard'));
}
return View::fetch();
}
/**
* 处理登录请求
*/
public function doLogin(Request $request)
{
$username = $request->post('username');
$password = $request->post('password');
if ($this->authService->login($username, $password)) {
return redirect((string)url('/dashboard'))->with('success', '登录成功');
}
return redirect((string)url('/login'))->with('error', '用户名或密码错误');
}
/**
* 退出登录
*/
public function logout()
{
$this->authService->logout();
return redirect((string)url('/login'))->with('success', '退出成功');
}
/**
* 用户列表
*/
public function userList()
{
$users = User::with('roles')->paginate(10);
View::assign('users', $users);
return View::fetch();
}
/**
* 角色列表
*/
public function roleList()
{
$roles = Role::with('permissions')->paginate(10);
View::assign('roles', $roles);
return View::fetch();
}
/**
* 权限列表
*/
public function permissionList()
{
$permissions = Permission::getPermissionTree();
View::assign('permissions', $permissions);
return View::fetch();
}
/**
* 分配用户角色
*/
public function assignUserRoles(Request $request)
{
$userId = $request->post('user_id');
$roleIds = $request->pos

最低0.47元/天 解锁文章
402

被折叠的 条评论
为什么被折叠?



