ITPub博客

首页 > 应用开发 > IT综合 > 开发体育直播系统后台权限设计实践分享|ThinkPHP 技术栈落地案例

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

IT综合 作者:小兔崽子程序员 时间:2025-04-23 16:26:19 0 删除 编辑
今天我们分享的是一套由 东莞梦幻网络科技 自研的体育直播源码,在 ThinkPHP + MySQL 技术栈的加持下,后台权限系统如何从0到1落地,并支撑整个平台稳定运行。

一、整体架构设计

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

二、后端技术选型

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

三、权限系统详细设计

3.1 RBAC增强模型
graph TD    
    A[管理员] -->|属于| B[角色]    
    B -->|包含| C[权限组]    
    C -->|包含| D[权限节点]    
    D -->|映射| E[控制器方法]    
    F[菜单] -->|绑定| D    
    G[操作日志] -->|记录| 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 权限中间件l
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_ap
路由级别
主播管理
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/delete  
  
    menus:    
    - 赛事管理    
    - 主播审核    
    - 社区管理

五、关键技术实现

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. 日志分片存储:按月份分表存储操作日志



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70044681/viewspace-3082207/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2025-03-22

  • 博文量
    7
  • 访问量
    8358