当前位置: 首页 > backend >正文

开发体育直播系统后台权限设计实践分享|ThinkPHP 技术栈落地案例

今天我们分享的是一套由 东莞梦幻网络科技 自研的体育直播源码,在 ThinkPHP + MySQL 技术栈的加持下,后台权限系统如何从0到1落地,并支撑整个平台稳定运行。

一、整体架构设计

用户端(APP / H5 / PC)↓
前端接口层(RESTful API / WebSocket)↓
后台业务服务层(PHP + ThinkPHP)↓
权限控制中间层(RBAC 扩展模型)↓
MySQL 数据层 + Redis 缓存层

二、后端技术选型

技术说明
PHP主语言,负责服务端业务逻辑处理
ThinkPHPMVC 框架,支持灵活的路由配置与中间件机制
MySQL核心数据库,存储用户数据、权限配置、日志信息等
Redis提升系统响应速度,用于缓存权限结构与临时数据
RBAC核心数据库,存储用户数据、权限配置、日志信息等
MySQL核心数据库,存储用户数据、权限配置、日志信息等

三、权限系统详细设计

3.1 RBAC增强模型

graph TDA[管理员] -->|属于| B[角色]B -->|包含| C[权限组]C -->|包含| D[权限节点]D -->|映射| E[控制器方法]F[菜单] -->|绑定| DG[操作日志] -->|记录| A

3.2 核心组件实现
3.2.1 权限节点自动化

// 在菜单配置中声明权限节点
'menu' => [['title' => '赛事管理','route' => 'match/index','auth_node' => ['match_add' => '添加赛事','match_del' => '删除赛事','match_sync' => '同步API' ]]
]// 自动注册到权限系统
class AuthService {public function syncNodes() {foreach(config('menu') as $menu){foreach($menu['auth_node'] as $node=>$name){NodeModel::firstOrCreate(['node' => $menu['route'].'@'.$node,'name' => $name]);}}}
}

3.2.2 动态角色绑定

// 角色权限模板配置
'role_templates' => ['content_admin' => ['match/*','anchor/audit','post/delete'],'shop_admin' => ['goods/*','order/*']
];// 角色创建时应用模板
$role->applyTemplate('content_admin');

3.2.3 权限中间件

class AuthMiddleware {public function handle($request, $next) {$node = $request->module().'/'.$request->controller().'@'.$request->action();if(!Auth::user()->can($node)){return response('无权操作', 403);}return $next($request);}
}

3.3 审计日志系统
日志记录维度:

  • 操作人、IP、时间戳
  • 操作类型(增删改查)
  • 受影响数据(JSON Diff)
  • 请求参数

关键实现:

// 数据库日志表结构
Schema::create('admin_logs', function (Blueprint $table) {$table->id();$table->integer('admin_id');$table->string('module', 30);$table->string('action', 50);$table->text('before_data')->nullable();$table->text('after_data')->nullable();$table->string('ip', 45);$table->timestamps();
});// 行为监听
Event::listen('admin.operate', function($admin, $action, $data){AdminLog::create(['admin_id' => $admin->id,'module' => request()->module(),'action' => $action,'before_data' => json_encode($data['before']),'after_data' => json_encode($data['after']),'ip' => request()->ip()]);
});

四、模块化权限控制

4.1 功能模块权限矩阵

模块名称权限节点控制粒度
赛事管理match/add, match/delete, match/sync_api路由级别
主播管理anchor/audit, anchor/ban, anchor/edit方法级别
社区管理post/delete, comment/ban, topic/set_top业务对象级
商城系统goods/add, stock/update, order/export数据范围级
专家预测expert/verify, predict/recommend状态机控制
竞猜活动quiz/create, quiz/publish, point/distribute时间窗口控制

4.2 典型权限配置示例

# 权限组配置
- group: 内容管理nodes:- match/add- match/delete- anchor/audit- post/deletemenus:- 赛事管理- 主播审核- 社区管理

五、关键技术实现

5.1 权限缓存优化

// 用户权限缓存结构
$userPermissions = Redis::hGetAll("user:{$uid}:permissions");// 权限检查优化
function checkPermission($node) {static $cache = [];if(!isset($cache[$node])){$cache[$node] = in_array($node, Redis::hGetAll("user:{$uid}:permissions"));}return $cache[$node];
}

5.2 数据权限控制

// 数据范围限制
class MatchController {public function index() {$query = Match::query();// 添加数据范围过滤if(!Auth::user()->can('match/all')){$query->whereIn('id', Auth::user()->getDataScope('match'));}return $query->paginate();}
}

六、部署架构

                   ┌───────────────┐│    CDN/OSS    │└──────┬───────┘│┌─────────────▼─────────────┐│         API Gateway        ││ (Nginx + Load Balancer)   │└───────┬─────────┬─────────┘│         │┌─────────▼─┐   ┌───▼─────────┐│  Web1     │   │  Web2       ││(PHP-FPM)  │   │(PHP-FPM)    │└────┬──────┘   └────┬───────┘│              │┌─────▼──────────────▼─────┐│        MySQL Cluster    ││ (Master-Slave + MHA)    │└──────────┬──────────────┘│┌─────▼─────┐│   Redis   ││ (Cluster)│└───────────┘

七、安全设计

  1. 权限最小化原则:所有新功能默认无权限
  2. 操作二次验证:敏感操作需短信/邮箱确认
  3. 权限变更追溯:权限修改记录永久保存
  4. 定期权限审计:每月自动扫描异常权限

八、性能优化

  1. 权限缓存:用户权限树Redis缓存,TTL 1小时
  2. 节点懒加载:非核心权限动态加载
  3. 批量检查优化:使用bitmap压缩权限标识
  4. 日志分片存储:按月份分表存储操作日志
http://www.xdnf.cn/news/1509.html

相关文章:

  • -PHP 反序列化POP 链构造魔术方法流程漏洞触发条件属性修改
  • 开源版「v0」OpenUI:根据文本生成UI界面代码
  • Sqlserver 自增长id 置零或者设置固定值
  • 【工具变量】各市ZF数字治理指标数据集(2001-2024年)
  • RabbitMQ 详解(核心概念)
  • 什么是回表?
  • A2A协议实现概览:多语言生态系统的蓬勃发展
  • vue项目中使用tinymce富文本编辑器
  • 楼宇自控系统如何打破传统桎梏,为建筑管理开创全新思路
  • 京东商品详情数据 API 接口讨论学习
  • Python内置函数---bytearray()
  • 八大排序算法
  • git pull的时候报错
  • 主流开源 LLM 应用开发平台详解
  • 记录下递归
  • 0.(新专栏目录)数据分类的艺术:从理论到实践的全面指南
  • 结构型模式:适配器模式
  • java后端开发day35--集合进阶(四)--双列集合:MapHashMapTreeMap
  • leetcode 二分查找应用
  • Linux/AndroidOS中进程间的通信线程间的同步 - IPC方式简介
  • Podman Desktop:现代轻量容器管理利器(Podman与Docker)
  • 基于stm32的智能门锁系统
  • ecovadis评估注意事项?ecovadis评估过程需要多长时间
  • gem5-gpu教程05 内存建模
  • 46. 全排列
  • Prisma JSON存储扩展性
  • 1.6软考系统架构设计师:架构师的角色与能力要求 - 练习题附答案及超详细解析
  • OpenCV图像轮廓示例
  • 如何创建GitLab 合并请求?
  • 【每日八股】复习 MySQL Day2:索引