*/ public static function definitions(): array { return [ self::ROOM_ANNOUNCEMENT => [ 'group' => '聊天室管理', 'label' => '设置公告', 'description' => '允许修改聊天室顶部滚动公告。', ], self::ROOM_PUBLIC_BROADCAST => [ 'group' => '聊天室管理', 'label' => '公屏讲话', 'description' => '允许在聊天室内发送管理员公屏讲话。', ], self::ROOM_CLEAR_SCREEN => [ 'group' => '聊天室管理', 'label' => '全员清屏', 'description' => '允许清除当前房间所有人的普通聊天记录。', ], self::ROOM_RED_PACKET => [ 'group' => '活动管理', 'label' => '礼包红包', 'description' => '允许在聊天室内发出金币或经验礼包。', ], self::ROOM_BACCARAT_LOSS_COVER => [ 'group' => '活动管理', 'label' => '买单活动', 'description' => '允许创建和结束百家乐买单活动。', ], self::ROOM_FULLSCREEN_EFFECT => [ 'group' => '全屏特效', 'label' => '全屏特效', 'description' => '允许触发聊天室内全部全屏动画特效。', ], self::ROOM_REWARD => [ 'group' => '用户管理', 'label' => '奖励金币', 'description' => '允许在额度限制内向低位阶用户发放职务金币奖励。', ], self::USER_WARN => [ 'group' => '用户管理', 'label' => '警告用户', 'description' => '允许在用户名片内对低于自身职务的用户发送警告。', ], self::USER_KICK => [ 'group' => '用户管理', 'label' => '踢出用户', 'description' => '允许在用户名片内将低于自身职务的用户踢出当前聊天室。', ], self::USER_MUTE => [ 'group' => '用户管理', 'label' => '禁言用户', 'description' => '允许在用户名片内对低于自身职务的用户执行禁言。', ], self::USER_FREEZE => [ 'group' => '用户管理', 'label' => '冻结用户', 'description' => '允许在用户名片内冻结低于自身职务的用户账号。', ], ]; } /** * 返回全部权限码列表。 * * @return list */ public static function codes(): array { return array_keys(self::definitions()); } /** * 返回权限码到中文标题的映射。 * * @return array */ public static function labelMap(): array { $labels = []; foreach (self::definitions() as $code => $definition) { $labels[$code] = $definition['label']; } return $labels; } /** * 按分组返回权限定义,供后台表单渲染。 * * @return array> */ public static function groupedDefinitions(): array { $grouped = []; foreach (self::definitions() as $code => $definition) { $grouped[$definition['group']][$code] = [ 'label' => $definition['label'], 'description' => $definition['description'], ]; } return $grouped; } /** * 将权限码数组转换为中文标题列表。 * * @param list $codes * @return list */ public static function summaryLabels(array $codes): array { $labels = self::labelMap(); return array_values(array_map( fn (string $code): string => $labels[$code] ?? $code, array_values(array_intersect(self::codes(), $codes)) )); } /** * 根据职务等级返回默认权限。 * * 默认策略: * - Lv.60 及以上默认拥有「设置公告」 * - Lv.97 及以上默认拥有顶部管理菜单全部权限 * * @return list */ public static function defaultPermissionsForLevel(int $level): array { if ($level >= 97) { return self::codes(); } if ($level >= 60) { return [self::ROOM_ANNOUNCEMENT]; } return []; } }