mirror of https://github.com/rocboss/paopao-ce
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
2.5 KiB
124 lines
2.5 KiB
// Copyright 2022 ROC. All rights reserved.
|
|
// Use of this source code is governed by a MIT style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package core
|
|
|
|
import (
|
|
"github.com/rocboss/paopao-ce/pkg/types"
|
|
)
|
|
|
|
const (
|
|
ActRegisterUser act = iota
|
|
ActCreatePublicTweet
|
|
ActCreatePublicAttachment
|
|
ActCreatePublicPicture
|
|
ActCreatePublicVideo
|
|
ActCreatePrivateTweet
|
|
ActCreatePrivateAttachment
|
|
ActCreatePrivatePicture
|
|
ActCreatePrivateVideo
|
|
ActCreateFriendTweet
|
|
ActCreateFriendAttachment
|
|
ActCreateFriendPicture
|
|
ActCreateFriendVideo
|
|
ActCreatePublicComment
|
|
ActCreatePublicPicureComment
|
|
ActCreateFriendComment
|
|
ActCreateFriendPicureComment
|
|
ActCreatePrivateComment
|
|
ActCreatePrivatePicureComment
|
|
ActStickTweet
|
|
ActTopTweet
|
|
ActLockTweet
|
|
ActVisibleTweet
|
|
ActDeleteTweet
|
|
ActCreateActivationCode
|
|
)
|
|
|
|
type (
|
|
act uint8
|
|
|
|
FriendFilter map[int64]types.Empty
|
|
FriendSet map[string]types.Empty
|
|
|
|
Action struct {
|
|
Act act
|
|
UserId int64
|
|
}
|
|
)
|
|
|
|
func (f FriendFilter) IsFriend(userId int64) bool {
|
|
_, yeah := f[userId]
|
|
return yeah
|
|
}
|
|
|
|
// IsAllow default true if user is admin
|
|
func (a act) IsAllow(user *User, userId int64, isFriend bool, isActivation bool) bool {
|
|
if user.IsAdmin {
|
|
return true
|
|
}
|
|
if user.ID == userId && isActivation {
|
|
switch a {
|
|
case ActCreatePublicTweet,
|
|
ActCreatePublicAttachment,
|
|
ActCreatePublicPicture,
|
|
ActCreatePublicVideo,
|
|
ActCreatePrivateTweet,
|
|
ActCreatePrivateAttachment,
|
|
ActCreatePrivatePicture,
|
|
ActCreatePrivateVideo,
|
|
ActCreateFriendTweet,
|
|
ActCreateFriendAttachment,
|
|
ActCreateFriendPicture,
|
|
ActCreateFriendVideo,
|
|
ActCreatePrivateComment,
|
|
ActCreatePrivatePicureComment,
|
|
ActStickTweet,
|
|
ActLockTweet,
|
|
ActVisibleTweet,
|
|
ActDeleteTweet:
|
|
return true
|
|
}
|
|
}
|
|
|
|
if user.ID == userId && !isActivation {
|
|
switch a {
|
|
case ActCreatePrivateTweet,
|
|
ActCreatePrivateComment,
|
|
ActStickTweet,
|
|
ActLockTweet,
|
|
ActDeleteTweet:
|
|
return true
|
|
}
|
|
}
|
|
|
|
if isFriend && isActivation {
|
|
switch a {
|
|
case ActCreatePublicComment,
|
|
ActCreatePublicPicureComment,
|
|
ActCreateFriendComment,
|
|
ActCreateFriendPicureComment:
|
|
return true
|
|
}
|
|
}
|
|
|
|
if !isFriend && isActivation {
|
|
switch a {
|
|
case ActCreatePublicComment,
|
|
ActCreatePublicPicureComment:
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
// AuthorizationManageService 授权管理服务
|
|
type AuthorizationManageService interface {
|
|
IsAllow(user *User, action *Action) bool
|
|
BeFriendFilter(userId int64) FriendFilter
|
|
BeFriendIds(userId int64) ([]int64, error)
|
|
MyFriendSet(userId int64) FriendSet
|
|
}
|