在视频平台运营中,针对不同等级的用户开放不同范围的视频资源是提升用户留存、实现差异化运营的重要手段。通过PHP编写后端逻辑,可以清晰定义用户等级与视频的对应关系,实现精准的视频分配。

核心实现思路
按用户等级分配视频的核心逻辑分为三个部分:定义用户等级体系、关联视频与可观看等级、编写分配校验逻辑。首先需要明确平台的用户等级划分,比如普通用户、会员用户、高级会员等,每个等级对应不同的权限标识。其次需要为视频资源标记允许观看的最低等级,最后在用户请求视频时,校验用户等级是否满足视频的观看要求。
数据库表设计
实现该功能需要两张核心表,分别是用户表和视频表,表结构参考如下:
| 表名 | 字段 | 说明 |
|---|---|---|
| user | id | 用户ID,主键 |
| username | 用户名 | |
| level | 用户等级,数值越大等级越高 | |
| video | id | 视频ID,主键 |
| title | 视频标题 | |
| url | 视频播放地址 | |
| min_level | 可观看该视频的最低用户等级 |
PHP实现代码示例
1. 获取用户等级
首先根据用户ID查询对应的用户等级,代码如下:
<?php
/**
* 根据用户ID获取用户等级
* @param int $userId 用户ID
* @return int 用户等级,未找到用户返回0
*/
function getUserLevel($userId) {
// 模拟数据库连接,实际项目中替换为真实的数据库操作
$pdo = new PDO('mysql:host=127.0.0.1;dbname=test;charset=utf8', 'root', '123456');
$sql = 'SELECT level FROM user WHERE id = :user_id LIMIT 1';
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':user_id', $userId, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetch(PDO::FETCH_ASSOC);
return $result ? (int)$result['level'] : 0;
}
?>
2. 校验视频观看权限
获取用户等级后,校验该用户是否可以观看指定视频,代码如下:
<?php
/**
* 校验用户是否可以观看指定视频
* @param int $userId 用户ID
* @param int $videoId 视频ID
* @return bool 有权限返回true,无权限返回false
*/
function checkVideoPermission($userId, $videoId) {
// 获取用户等级
$userLevel = getUserLevel($userId);
if ($userLevel == 0) {
return false; // 用户不存在
}
// 模拟数据库连接,实际项目中替换为真实的数据库操作
$pdo = new PDO('mysql:host=127.0.0.1;dbname=test;charset=utf8', 'root', '123456');
// 查询视频要求的最低等级
$sql = 'SELECT min_level FROM video WHERE id = :video_id LIMIT 1';
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':video_id', $videoId, PDO::PARAM_INT);
$stmt->execute();
$videoInfo = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$videoInfo) {
return false; // 视频不存在
}
// 用户等级大于等于最低要求等级则有权限
return $userLevel >= (int)$videoInfo['min_level'];
}
?>
3. 获取用户可观看的视频列表
根据用户的等级,筛选出所有该用户可以观看的视频列表,代码如下:
<?php
/**
* 获取用户可观看的视频列表
* @param int $userId 用户ID
* @return array 视频列表数组
*/
function getUserVideoList($userId) {
$userLevel = getUserLevel($userId);
if ($userLevel == 0) {
return []; // 用户不存在返回空列表
}
// 模拟数据库连接,实际项目中替换为真实的数据库操作
$pdo = new PDO('mysql:host=127.0.0.1;dbname=test;charset=utf8', 'root', '123456');
// 查询所有最低等级小于等于用户等级的视频
$sql = 'SELECT id, title, url FROM video WHERE min_level <= :user_level';
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':user_level', $userLevel, PDO::PARAM_INT);
$stmt->execute();
return $stmt->fetchAll(PDO::FETCH_ASSOC);
}
?>
注意事项
- 实际项目中需要将数据库操作封装为独立的类,避免重复编写连接代码
- 用户等级和视频的最低等级建议用常量定义,避免直接使用数字,提升代码可读性
- 如果用户等级规则复杂,比如不同等级有独立的视频白名单,可以在上述逻辑基础上扩展关联表实现
- 视频地址建议做权限校验后再返回,避免用户直接拼接地址绕过等级限制