XinAdmin 项目采用 Laravel Sanctum 进行 API 认证,并结合自定义的注解路由系统实现灵活的权限控制。系统支持双端认证,分别为管理员端(sys_users)和用户端(users),每端都有独立的认证守卫和权限体系。
XinAdmin 使用 Laravel Sanctum 作为 API 认证解决方案,它提供了一种轻量级的方式来处理 API 认证,支持令牌认证和无状态认证。
Sanctum 的配置位于 config/sanctum.php,关键配置包括:
expiration: Token 过期时间(分钟)token_prefix: Token 前缀,用于防止意外提交到代码仓库middleware: Sanctum 使用的中间件XinAdmin 支持管理员端和用户端两套独立的认证体系。
管理员认证使用 sys_users 守卫,对应 sys_user 数据表。管理员模型为 App\Models\Sys\SysUserModel,继承自 Laravel 的 User 类并实现了 Sanctum 的 HasApiTokens 特征。
普通用户认证使用 users 守卫,对应 user 数据表。用户模型为 App\Models\UserModel,同样实现了 Sanctum 的 API Token 功能。
XinAdmin 实现了基于角色的权限控制(RBAC),支持细粒度的权限管理。
系统通过三个核心表实现权限管理:
sys_user:用户表sys_role:角色表sys_rule:权限规则表sys_user_role:用户-角色关联表sys_role_rule:角色-权限关联表权限规则通过 SysRuleModel 模型管理,支持树形结构的权限组织。每个权限规则包含以下字段:
id: 权限IDparent_id: 父级权限IDtype: 类型('menu' | 'route' | 'nested-route' | 'rule')key: 唯一标识,用于权限验证name: 权限名称path: 路径status: 状态(1正常 0禁用)XinAdmin 实现了一套基于 PHP 8 注解的路由系统,简化了路由定义和权限控制。
使用 #[RequestMapping] 注解定义控制器级别的路由配置:
RequestMapping 注解参数:
routePrefix (string): 路由前缀abilitiesPrefix (string): 权限前缀middleware (string | array): 中间件配置authGuard (string): 认证守卫你只需在改注解内定义 abilitiesPrefix 控制器内所有方法的权限都会添加改前缀,它们会以 . 拼装。
#[GetMapping]、#[PostMapping]、#[PutMapping]、#[DeleteMapping] 等注解均支持权限控制:
方法级注解参数:
route (string): 路由路径,与类上的 routePrefix 拼接形成完整路由authorize (string): 权限字符串,与类上的 abilitiesPrefix 拼接形成完整权限middleware (string | array): 路由中间件配置where (array): 路由参数约束注解路由的更多使用方式请移步注解路由
系统为默认的控制器方法提供默认的权限注解:
上面控制器的CRUD方法会校验用户是否拥有以下权限:
example.list.queryexample.list.createexample.list.updateexample.list.delete你可以在 UI 后台很方便的启用或者停用某个权限,当然也会限制接口的请求,具体内容请查看功能模块-权限管理