template-monorepo/internal/model/permission/domain/entity/permission.go

38 lines
1.5 KiB
Go
Raw Permalink Normal View History

package entity
import (
"gateway/internal/model/permission/domain/enum"
"go.mongodb.org/mongo-driver/v2/bson"
)
// Permission is the platform-wide permission catalog node. Tenants may not
// create permissions; they pick from the catalog when assigning to roles.
//
// Tree model: Parent holds the parent ObjectID hex (or empty for root).
// Category nodes (no HTTPPath) are UI-only and never written to Casbin
// policy.
type Permission struct {
ID bson.ObjectID `bson:"_id,omitempty"`
Parent string `bson:"parent,omitempty"` // parent ObjectID hex; empty = root
Name string `bson:"name"` // dot-notation, unique platform-wide
HTTPMethods string `bson:"http_methods,omitempty"` // "GET" or "GET|POST|PATCH"
HTTPPath string `bson:"http_path,omitempty"` // keyMatch2 pattern, e.g. /api/v1/members/*
Status enum.Status `bson:"status"`
Type enum.PermissionType `bson:"type"`
CreateAt int64 `bson:"create_at"`
UpdateAt int64 `bson:"update_at"`
}
// CollectionName returns the MongoDB collection for permissions.
func (Permission) CollectionName() string {
return "permissions"
}
// IsLeaf reports whether the permission is a Casbin-enforceable leaf
// (i.e. has both http_path and http_methods set). Category nodes return
// false and are never written to policy rules.
func (p *Permission) IsLeaf() bool {
return p != nil && p.HTTPPath != "" && p.HTTPMethods != ""
}