优化:注册与登录拦截处支持针对后台管理的永久禁用黑名单词汇采用“模糊匹配”(只要包含该词汇即拦截)
This commit is contained in:
@@ -50,17 +50,24 @@ class UsernameBlacklist extends Model
|
|||||||
*/
|
*/
|
||||||
public static function isBlocked(string $username): bool
|
public static function isBlocked(string $username): bool
|
||||||
{
|
{
|
||||||
return static::where('username', $username)
|
// 1. 检查是否存在精确匹配且未过期的“临时改名保留”名称
|
||||||
->where(function ($q) {
|
$hasTemp = static::where('type', 'temp')
|
||||||
// 永久禁用
|
->where('username', $username)
|
||||||
$q->where('type', 'permanent')
|
->where('reserved_until', '>', now())
|
||||||
// 或:临时保留且尚未到期
|
|
||||||
->orWhere(function ($q2) {
|
|
||||||
$q2->where('type', 'temp')
|
|
||||||
->where('reserved_until', '>', now());
|
|
||||||
});
|
|
||||||
})
|
|
||||||
->exists();
|
->exists();
|
||||||
|
|
||||||
|
if ($hasTemp) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 检查永久禁用词,改为【模糊匹配】(只要新注册的名字中包含禁用词,拦截)
|
||||||
|
// 比如数据库禁用了 "admin",那么 "admin123" 也会触发拦截
|
||||||
|
$hasPermanent = static::where('type', 'permanent')
|
||||||
|
->where('username', '!=', '')
|
||||||
|
->whereRaw('? LIKE CONCAT("%", username, "%")', [$username])
|
||||||
|
->exists();
|
||||||
|
|
||||||
|
return $hasPermanent;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user