You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
OneAuth/models/auth.go

91 lines
3.1 KiB
Go

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//
// Copyright (C) 2024 veypi <i@veypi.com>
// 2025-02-14 16:08:06
// Distributed under terms of the MIT license.
//
package models
import (
"time"
"github.com/veypi/vigo"
)
// 角色代码常量
const (
RoleCodeAdmin = "admin"
RoleCodeUser = "user"
RoleCodeViewer = "viewer"
)
// Permission 权限表
// 统一存储用户权限和角色权限
// UserID 和 RoleID 必须有一个且只能有一个有值
type Permission struct {
vigo.Model
Scope string `json:"scope" gorm:"index;size:50;default:'default'" desc:"作用域"`
UserID *string `json:"user_id" gorm:"index;size:36" desc:"用户ID"`
RoleID *string `json:"role_id" gorm:"index;size:36" desc:"角色ID"`
PermissionID string `json:"permission_id" gorm:"index;size:255;not null" desc:"权限ID层级结构"`
Level int `json:"level" gorm:"default:0" desc:"权限等级: 1=创建, 2=读, 4=写, 6=读写, 7=管理"`
ExpireAt *time.Time `json:"expire_at" desc:"过期时间(可选)"`
// 外键关联
User *User `json:"user,omitempty" gorm:"foreignKey:UserID;references:ID"`
Role *Role `json:"role,omitempty" gorm:"foreignKey:RoleID;references:ID"`
}
func (Permission) TableName() string {
return "permissions"
}
// Role 角色表
type Role struct {
vigo.Model
Scope string `json:"scope" gorm:"uniqueIndex:idx_role_scope_code;size:50;default:'default'" desc:"作用域"`
Code string `json:"code" gorm:"uniqueIndex:idx_role_scope_code;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"
}
// UserRole 用户角色关联表
type UserRole struct {
vigo.Model
UserID string `json:"user_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:"过期时间(可选)"`
// 外键关联
User User `json:"user,omitempty" gorm:"foreignKey:UserID;references:ID"`
Role Role `json:"role,omitempty" gorm:"foreignKey:RoleID;references:ID"`
}
func (UserRole) TableName() string {
return "user_roles"
}
// GrantRoleRequest 授予角色请求
type GrantRoleRequest struct {
Scope string `json:"scope" desc:"作用域"`
UserID string `json:"user_id" desc:"用户ID"`
RoleCode string `json:"role_code" desc:"角色代码"`
ExpireAt *time.Time `json:"expire_at" desc:"过期时间(可选)"`
}
// GrantPermissionRequest 授予权限请求
type GrantPermissionRequest struct {
Scope string `json:"scope" desc:"作用域"`
UserID string `json:"user_id" desc:"用户ID可选"`
RoleID string `json:"role_id" desc:"角色ID可选"`
PermissionID string `json:"permission_id" desc:"权限ID"`
Level int `json:"level" desc:"权限等级"`
ExpireAt *time.Time `json:"expire_at" desc:"过期时间(可选)"`
}