backend/tmp/reborn/domain/entity/permission.go

75 lines
2.1 KiB
Go

package entity
// Permission 權限實體
type Permission struct {
ID int64 `gorm:"column:id;primaryKey" json:"id"`
ParentID int64 `gorm:"column:parent;index" json:"parent_id"`
Name string `gorm:"column:name;size:100;index" json:"name"`
HTTPMethod string `gorm:"column:http_method;size:10" json:"http_method,omitempty"`
HTTPPath string `gorm:"column:http_path;size:255" json:"http_path,omitempty"`
Status Status `gorm:"column:status;index" json:"status"`
Type PermissionType `gorm:"column:type" json:"type"`
TimeStamp
}
// TableName 指定表名
func (Permission) TableName() string {
return "permission"
}
// IsActive 是否啟用
func (p *Permission) IsActive() bool {
return p.Status.IsActive()
}
// IsParent 是否為父權限
func (p *Permission) IsParent() bool {
return p.ParentID == 0
}
// IsAPIPermission 是否為 API 權限
func (p *Permission) IsAPIPermission() bool {
return p.HTTPPath != "" && p.HTTPMethod != ""
}
// Validate 驗證資料
func (p *Permission) Validate() error {
if p.Name == "" {
return ErrInvalidData("permission name is required")
}
if p.ParentID < 0 {
return ErrInvalidData("permission parent_id cannot be negative")
}
// API 權限必須有 path 和 method
if (p.HTTPPath != "" && p.HTTPMethod == "") || (p.HTTPPath == "" && p.HTTPMethod != "") {
return ErrInvalidData("permission http_path and http_method must be both set or both empty")
}
return nil
}
// RolePermission 角色權限關聯實體
type RolePermission struct {
ID int64 `gorm:"column:id;primaryKey" json:"id"`
RoleID int64 `gorm:"column:role_id;index:idx_role_permission" json:"role_id"`
PermissionID int64 `gorm:"column:permission_id;index:idx_role_permission" json:"permission_id"`
TimeStamp
}
// TableName 指定表名
func (RolePermission) TableName() string {
return "role_permission"
}
// Validate 驗證資料
func (rp *RolePermission) Validate() error {
if rp.RoleID <= 0 {
return ErrInvalidData("role_id must be positive")
}
if rp.PermissionID <= 0 {
return ErrInvalidData("permission_id must be positive")
}
return nil
}