// // Copyright (C) 2024 veypi // 2025-02-14 16:08:06 // Distributed under terms of the MIT license. // package models import ( "time" "gorm.io/gorm" ) // 角色代码常量 const ( RoleCodeAdmin = "admin" RoleCodeUser = "user" RoleCodeViewer = "viewer" ) // Permission 权限定义表(权限字典) // ID 格式: app:resource:action (例如: crm:customer:read) type Permission struct { CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `json:"-" gorm:"index"` ID string `json:"id" gorm:"primaryKey;size:100" desc:"权限ID,格式: app:resource:action"` AppKey string `json:"app_key" gorm:"index;size:50" desc:"应用标识"` Resource string `json:"resource" gorm:"index;size:50" desc:"资源类型"` Action string `json:"action" gorm:"index;size:50" desc:"操作类型"` Description string `json:"description" desc:"权限描述"` } func (Permission) TableName() string { return "permissions" } // Role 角色表(不关联 app,可跨应用) type Role struct { Base OrgID string `json:"org_id" gorm:"index;size:36" desc:"组织ID,空=系统预设"` Code string `json:"code" gorm:"index;size:50" desc:"角色代码"` Name string `json:"name" desc:"角色名称"` Description string `json:"description" desc:"角色描述"` IsSystem bool `json:"is_system" desc:"是否系统预设角色"` Status int `json:"status" gorm:"default:1" desc:"状态: 1=启用, 0=禁用"` } func (Role) TableName() string { return "roles" } // RolePermission 角色权限关联表 type RolePermission struct { Base RoleID string `json:"role_id" gorm:"index;size:36" desc:"角色ID"` PermissionID string `json:"permission_id" gorm:"index;size:100" desc:"权限ID"` Condition string `json:"condition" gorm:"size:20;default:'none'" desc:"权限条件: none/owner/admin"` } func (RolePermission) TableName() string { return "role_permissions" } // UserRole 用户角色关联表 type UserRole struct { Base UserID string `json:"user_id" gorm:"index;size:36" desc:"用户ID"` OrgID string `json:"org_id" gorm:"index;size:36" desc:"组织ID"` RoleID string `json:"role_id" gorm:"index;size:36" desc:"角色ID"` ExpireAt *time.Time `json:"expire_at" desc:"过期时间(可选)"` } func (UserRole) TableName() string { return "user_roles" } // UserPermission 用户特定资源权限表(数据级权限) type UserPermission struct { Base UserID string `json:"user_id" gorm:"index;size:36" desc:"用户ID"` OrgID string `json:"org_id" gorm:"index;size:36" desc:"组织ID"` PermissionID string `json:"permission_id" gorm:"index;size:100" desc:"权限ID"` ResourceID string `json:"resource_id" gorm:"index;size:100" desc:"具体资源ID,* 表示所有"` ExpireAt *time.Time `json:"expire_at" desc:"过期时间(可选)"` GrantedBy string `json:"granted_by" gorm:"size:36" desc:"授权人ID"` } func (UserPermission) TableName() string { return "user_permissions" } // AppConfig 应用配置(用于权限初始化) type AppConfig struct { Name string `json:"name" desc:"应用名称"` Description string `json:"description" desc:"应用描述"` DefaultRoles []RoleDefinition `json:"default_roles" desc:"预设角色"` } // RoleDefinition 角色定义(配置用) type RoleDefinition struct { Code string `json:"code" desc:"角色代码"` Name string `json:"name" desc:"角色名称"` Description string `json:"description" desc:"角色描述"` Policies []string `json:"policies" desc:"权限列表: ["customer:read", "*:*"]"` } // GrantRoleRequest 授予角色请求 type GrantRoleRequest struct { UserID string `json:"user_id" desc:"用户ID"` OrgID string `json:"org_id" desc:"组织ID"` RoleCode string `json:"role_code" desc:"角色代码"` ExpireAt *time.Time `json:"expire_at" desc:"过期时间(可选)"` } // GrantResourcePermRequest 授予资源权限请求 type GrantResourcePermRequest struct { UserID string `json:"user_id" desc:"用户ID"` OrgID string `json:"org_id" desc:"组织ID"` PermissionID string `json:"permission_id" desc:"权限ID"` ResourceID string `json:"resource_id" desc:"资源实例ID,* 表示所有"` ExpireAt *time.Time `json:"expire_at" desc:"过期时间(可选)"` GrantedBy string `json:"granted_by" desc:"授权人ID"` } // CheckPermRequest 检查权限请求 type CheckPermRequest struct { UserID string `json:"user_id" desc:"用户ID"` OrgID string `json:"org_id" desc:"组织ID"` PermissionID string `json:"permission_id" desc:"权限ID"` ResourceID string `json:"resource_id" desc:"资源实例ID(可选)"` } // UserPermissionResult 用户权限结果 type UserPermissionResult struct { PermissionID string `json:"permission_id" desc:"权限ID"` ResourceID string `json:"resource_id" desc:"资源ID,* 表示所有"` Actions []string `json:"actions" desc:"允许的操作"` } // ResourceUser 资源授权用户 type ResourceUser struct { UserID string `json:"user_id" desc:"用户ID"` Actions []string `json:"actions" desc:"允许的操作"` }