路由前缀本身无权限,需结合中间件实现权限控制;命名应体现业务模块或能力域,嵌套分组可细化粒度,api版本宜用独立文件+中间件注入。

路由前缀本身不带权限,但结合中间件和命名空间后,能自然形成按路径划分的权限边界。关键不是给前缀“配权限”,而是用分组把权限控制逻辑集中落地。
前缀必须配合中间件才起权限作用
只写 prefix => 'admin' 不会自动限制访问——它只是改 URL 路径。真正实现权限拦截的是中间件。比如:
-
'middleware' => ['auth', 'can:manage-system']:登录 + RBAC 权限校验 -
'middleware' => ['throttle:60,1', 'verified']:限流 + 邮箱验证 - 自定义中间件如
CheckTenantScope可基于前缀动态判断租户上下文
前缀命名要兼顾可读性与权限映射习惯
前缀不是随便起的,它常对应业务模块或角色能力域:
-
prefix => 'admin'→ 通常绑定admin.*权限策略 -
prefix => 'api/v2'→ 可在中间件中提取v2做版本级鉴权 -
prefix => 'tenant/{tenant_id}'→ 配合模型绑定 + 策略自动检查租户归属
避免用模糊前缀如 prefix => 'v1' 单独存在,应组合为 api/v1 或 internal/v1,让权限规则有明确语义锚点。
权限粒度可借嵌套分组细化
大模块下再分小权限域,用嵌套分组比堆 if-else 更清晰:
- 外层
prefix => 'admin'+middleware => ['auth', 'role:admin'] - 内层
prefix => 'users'+as => 'admin.users.'+middleware => ['can:manage-users'] - 再内层
prefix => 'roles'+middleware => ['can:assign-roles']
这样 route('admin.users.index') 和 route('admin.roles.index') 对应不同权限检查点,模板和策略都能精准响应。
API 版本前缀建议走独立文件+中间件注入
不要只靠 /v1、/v2 字符串做权限分支。更可靠的做法是:
- 在
routes/api/v1.php和routes/api/v2.php中分别定义分组 - 注册时用
Route::prefix('api/v1')->middleware('api.version:v1') - 中间件
ApiVersion把版本号写入请求属性:$request->attributes->set('api_version', 'v1') - 后续策略或控制器可直接读取,避免硬编码字符串匹配











