38 lines
1.5 KiB
Go
38 lines
1.5 KiB
Go
|
|
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 != ""
|
||
|
|
}
|