Changeset 0.16.0 (#74)
This commit is contained in:
@@ -623,6 +623,60 @@ func Float64Ptr(f float64) *float64 { return &f }
|
||||
func IntPtr(i int) *int { return &i }
|
||||
func BoolPtr(b bool) *bool { return &b }
|
||||
|
||||
// =========================================
|
||||
// GROUPS (v0.16.0)
|
||||
// =========================================
|
||||
|
||||
// Group scope constants (reuses ScopeGlobal, ScopeTeam from above)
|
||||
|
||||
// ResourceType constants for resource_grants
|
||||
const (
|
||||
ResourceTypePersona = "persona"
|
||||
ResourceTypeKnowledgeBase = "knowledge_base"
|
||||
)
|
||||
|
||||
// GrantScope constants for resource_grants
|
||||
const (
|
||||
GrantScopeTeamOnly = "team_only"
|
||||
GrantScopeGlobal = "global"
|
||||
GrantScopeGroups = "groups"
|
||||
)
|
||||
|
||||
// Group is an access-control list. Decouples resource visibility from teams.
|
||||
type Group struct {
|
||||
BaseModel
|
||||
Name string `json:"name" db:"name"`
|
||||
Description string `json:"description" db:"description"`
|
||||
Scope string `json:"scope" db:"scope"` // global, team
|
||||
TeamID *string `json:"team_id,omitempty" db:"team_id"`
|
||||
CreatedBy string `json:"created_by" db:"created_by"`
|
||||
MemberCount int `json:"member_count,omitempty"` // computed, not a DB column
|
||||
}
|
||||
|
||||
// GroupMember links a user to a group.
|
||||
type GroupMember struct {
|
||||
ID string `json:"id" db:"id"`
|
||||
GroupID string `json:"group_id" db:"group_id"`
|
||||
UserID string `json:"user_id" db:"user_id"`
|
||||
AddedBy string `json:"added_by" db:"added_by"`
|
||||
AddedAt time.Time `json:"added_at" db:"added_at"`
|
||||
// Joined fields from users table (for list responses)
|
||||
Username string `json:"username,omitempty"`
|
||||
Email string `json:"email,omitempty"`
|
||||
DisplayName string `json:"display_name,omitempty"`
|
||||
}
|
||||
|
||||
// ResourceGrant controls who can USE a resource (personas, KBs) via groups.
|
||||
// One row per resource. Not to be confused with persona_grants (what a Persona can DO).
|
||||
type ResourceGrant struct {
|
||||
BaseModel
|
||||
ResourceType string `json:"resource_type" db:"resource_type"`
|
||||
ResourceID string `json:"resource_id" db:"resource_id"`
|
||||
GrantScope string `json:"grant_scope" db:"grant_scope"`
|
||||
GrantedGroups []string `json:"granted_groups" db:"granted_groups"` // UUID array
|
||||
CreatedBy string `json:"created_by" db:"created_by"`
|
||||
}
|
||||
|
||||
// ── Knowledge Bases ────────────────────────────
|
||||
|
||||
// KnowledgeBase is a named collection of documents with vector embeddings.
|
||||
|
||||
Reference in New Issue
Block a user