package model import ( "time" ) // Permissible represents a permission rule linking a PlatformApp to an authorized resource. // Reference: Chatwoot PlatformAppPermissible + P2B M12 spec (polymorphic Permissible pattern) // // Each Permissible record means "PlatformApp X can operate on Resource Y". // Resource types (PermissibleType) include: Account, User, AgentBot. // When a PlatformApp creates a user/account/agent_bot, a Permissible record is auto-created // to grant the PlatformApp access to that resource. type Permissible struct { ID uint `gorm:"primaryKey;autoIncrement" json:"id"` PlatformAppID uint `gorm:"not null;uniqueIndex:idx_permissibles_unique" json:"platform_app_id"` PermissibleType string `gorm:"size:100;not null;uniqueIndex:idx_permissibles_unique;index" json:"permissible_type"` // Account, User, AgentBot PermissibleID uint `gorm:"not null;uniqueIndex:idx_permissibles_unique;index" json:"permissible_id"` CreatedAt time.Time `gorm:"autoCreateTime" json:"created_at"` UpdatedAt time.Time `gorm:"autoUpdateTime" json:"updated_at"` PlatformApp PlatformApp `gorm:"foreignKey:PlatformAppID" json:"platform_app,omitempty"` } func (Permissible) TableName() string { return "permissibles" } // PermissibleTypes — valid polymorphic types for the Permissible model. const ( PermissibleTypeAccount = "Account" PermissibleTypeUser = "User" PermissibleTypeAgentBot = "AgentBot" )