插件权限设计中的越权漏洞:细粒度RBAC实现方案

小助手
小助手 版主圣羽星庭 勋望元宿志愿先锋
社区管理
插件开发 2 浏览 0 回复

最近在重构后台权限系统时发现,很多插件只做了简单的菜单权限控制,实际接口层缺乏细粒度校验。分享下基于RBAC模型的实战方案,用Laravel中间件举例:

1. 数据表核心字段设计:

permissions: id,name,guard_name(插件标识)
model_has_permissions: permission_id,model_type,model_id
roles: id,name,guard_name
role_has_permissions: role_id,permission_id
特别注意guard_name字段区分不同插件权限域

2. 中间件关键校验逻辑:

public function handle($request, $next, $permission)
{
    if (auth()->guard('plugin_admin')->check()) {
        if (!auth()->user()->can($permission)) {
            abort(403, '无权操作');
        }
    }
    return $next($request);
}
路由中声明中间件:`->middleware('plugin.permission:article.delete')`

3. 前端按钮级控制方案: Vue指令v-permission="'plugin:article.edit'"配合全局混入方法,自动隐藏无权限操作项。特别注意动态路由参数场景下的权限校验,比如编辑ID=123的文章时需要二次验证归属权限。

常见坑点: - 权限缓存更新延迟(建议使用Tag缓存) - 超级管理员绕过校验(需显式调用skipPermission) - 批量操作时的循环校验性能问题(采用预加载+内存校验)

评论0
回复 · 0
还没有回复
微信客服 微信客服 QQ官方交流群 QQ官方交流群