backend/tmp/reborn-mongo/domain/entity/role.go

61 lines
1.4 KiB
Go

package entity
import "go.mongodb.org/mongo-driver/bson/primitive"
// Role 角色實體 (MongoDB)
type Role struct {
ID primitive.ObjectID `bson:"_id,omitempty" json:"id"`
ClientID int `bson:"client_id" json:"client_id"`
UID string `bson:"uid" json:"uid"`
Name string `bson:"name" json:"name"`
Status Status `bson:"status" json:"status"`
// 關聯權限 (不存資料庫)
Permissions Permissions `bson:"-" json:"permissions,omitempty"`
TimeStamp `bson:",inline"`
}
// CollectionName 集合名稱
func (Role) CollectionName() string {
return "role"
}
// IsActive 是否啟用
func (r *Role) IsActive() bool {
return r.Status.IsActive()
}
// IsAdmin 是否為管理員角色
func (r *Role) IsAdmin(adminUID string) bool {
return r.UID == adminUID
}
// Validate 驗證角色資料
func (r *Role) Validate() error {
if r.UID == "" {
return ErrInvalidData("role uid is required")
}
if r.Name == "" {
return ErrInvalidData("role name is required")
}
if r.ClientID <= 0 {
return ErrInvalidData("role client_id must be positive")
}
return nil
}
// ErrInvalidData 無效資料錯誤
func ErrInvalidData(msg string) error {
return &ValidationError{Message: msg}
}
// ValidationError 驗證錯誤
type ValidationError struct {
Message string
}
func (e *ValidationError) Error() string {
return e.Message
}