refactor: Controller 不直接读 Session Exp,新增 CanCreatePost 方法

- 新增 userExpReader 最小接口(ISP),PostService 通过它读取用户经验值
- PostService 新增 CanCreatePost(userID uint) bool,封装 LV0 投稿权限判断
- StudioController 替换内联 c.Get("exp") 检查为调用 ctrl.postService.CanCreatePost(uid)
- 更新 DI 注入链:NewPostService 增加 userRepo 参数
This commit is contained in:
2026-06-02 16:52:44 +08:00
parent 3df7b2e672
commit 3e0fed80ce
5 changed files with 23 additions and 8 deletions

View File

@ -16,14 +16,16 @@ type PostService struct {
repo postStore
ss *config.SiteSettings
notifier postNotifier
userRepo userExpReader
}
// NewPostService 构造函数
func NewPostService(repo postStore, ss *config.SiteSettings, notifier postNotifier) *PostService {
func NewPostService(repo postStore, ss *config.SiteSettings, notifier postNotifier, userRepo userExpReader) *PostService {
return &PostService{
repo: repo,
ss: ss,
notifier: notifier,
userRepo: userRepo,
}
}
@ -145,6 +147,15 @@ func (s *PostService) IsPostAccessible(userID uint, role string, postUserID uint
return userID == postUserID || model.HasMinRole(role, model.RoleModerator)
}
// CanCreatePost 检查用户是否可以创建帖子LV0 用户不允许投稿)
func (s *PostService) CanCreatePost(userID uint) bool {
user, err := s.userRepo.FindByID(userID)
if err != nil {
return false
}
return user.Exp >= 1
}
// RecordRead 记录已登录用户阅读文章(已登录去重 + 防刷冷却)
func (s *PostService) RecordRead(userID, postID uint) {
firstRead, err := s.repo.RecordRead(userID, postID)