mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-29 11:36:36 +08:00
43fdfe8202
处理无法播放的问题
101 lines
3.9 KiB
Go
101 lines
3.9 KiB
Go
// Package model 定义权限相关的数据模型。
|
|
package model
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// UserPermission 定义用户细粒度权限(19项)。
|
|
// 默认开启(6项):CanViewDashboard, CanPlayMedia, CanCast, CanExternalPlayer, CanFavorite, CanViewHistory
|
|
// 默认关闭(13项):其他权限需要管理员分配
|
|
type UserPermission struct {
|
|
ID string `gorm:"primaryKey;size:36" json:"id"`
|
|
UserID string `gorm:"uniqueIndex;size:36;not null" json:"user_id"`
|
|
|
|
// 默认开启(6项)- Basic
|
|
CanViewDashboard bool `gorm:"default:true" json:"can_view_dashboard"`
|
|
CanPlayMedia bool `gorm:"default:true" json:"can_play_media"`
|
|
CanCast bool `gorm:"default:true" json:"can_cast"`
|
|
CanExternalPlayer bool `gorm:"default:true" json:"can_external_player"`
|
|
CanFavorite bool `gorm:"default:true" json:"can_favorite"`
|
|
CanViewHistory bool `gorm:"default:true" json:"can_view_history"`
|
|
|
|
// 默认关闭(13项)- Advanced
|
|
CanEditMedia bool `gorm:"default:false" json:"can_edit_media"`
|
|
CanRescrape bool `gorm:"default:false" json:"can_rescrape"`
|
|
CanUseAI bool `gorm:"default:false" json:"can_use_ai"`
|
|
CanCaptureFrames bool `gorm:"default:false" json:"can_capture_frames"`
|
|
CanManageDownloads bool `gorm:"default:false" json:"can_manage_downloads"`
|
|
CanManageSubscriptions bool `gorm:"default:false" json:"can_manage_subscriptions"`
|
|
CanManageSites bool `gorm:"default:false" json:"can_manage_sites"`
|
|
CanUseAIAssistant bool `gorm:"default:false" json:"can_use_ai_assistant"`
|
|
CanManageUsers bool `gorm:"default:false" json:"can_manage_users"`
|
|
CanManageFiles bool `gorm:"default:false" json:"can_manage_files"`
|
|
CanManageStrm bool `gorm:"default:false" json:"can_manage_strm"`
|
|
CanAccessSettings bool `gorm:"default:false" json:"can_access_settings"`
|
|
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
}
|
|
|
|
// BeforeCreate 生成 UUID。
|
|
func (p *UserPermission) BeforeCreate(_ *gorm.DB) error {
|
|
if p.ID == "" {
|
|
p.ID = uuid.NewString()
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// NewDefaultPermission 创建带有默认权限的 UserPermission。
|
|
func NewDefaultPermission(userID string) *UserPermission {
|
|
return &UserPermission{
|
|
ID: uuid.NewString(),
|
|
UserID: userID,
|
|
CanViewDashboard: true,
|
|
CanPlayMedia: true,
|
|
CanCast: true,
|
|
CanExternalPlayer: true,
|
|
CanFavorite: true,
|
|
CanViewHistory: true,
|
|
CanEditMedia: false,
|
|
CanRescrape: false,
|
|
CanUseAI: false,
|
|
CanCaptureFrames: false,
|
|
CanManageDownloads: false,
|
|
CanManageSubscriptions: false,
|
|
CanManageSites: false,
|
|
CanUseAIAssistant: false,
|
|
CanManageUsers: false,
|
|
CanManageFiles: false,
|
|
CanManageStrm: false,
|
|
CanAccessSettings: false,
|
|
}
|
|
}
|
|
|
|
// PermissionMap 将权限结构转换为 map[string]bool 便于检查。
|
|
func (p *UserPermission) PermissionMap() map[string]bool {
|
|
return map[string]bool{
|
|
"can_view_dashboard": p.CanViewDashboard,
|
|
"can_play_media": p.CanPlayMedia,
|
|
"can_cast": p.CanCast,
|
|
"can_external_player": p.CanExternalPlayer,
|
|
"can_favorite": p.CanFavorite,
|
|
"can_view_history": p.CanViewHistory,
|
|
"can_edit_media": p.CanEditMedia,
|
|
"can_rescrape": p.CanRescrape,
|
|
"can_use_ai": p.CanUseAI,
|
|
"can_capture_frames": p.CanCaptureFrames,
|
|
"can_manage_downloads": p.CanManageDownloads,
|
|
"can_manage_subscriptions": p.CanManageSubscriptions,
|
|
"can_manage_sites": p.CanManageSites,
|
|
"can_use_ai_assistant": p.CanUseAIAssistant,
|
|
"can_manage_users": p.CanManageUsers,
|
|
"can_manage_files": p.CanManageFiles,
|
|
"can_manage_strm": p.CanManageStrm,
|
|
"can_access_settings": p.CanAccessSettings,
|
|
}
|
|
}
|