auth

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 25, 2026 License: MIT Imports: 3 Imported by: 0

Documentation

Overview

Package auth 定义控制面认证主体、权限检查和 context 传递协议。

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrUnauthenticated 表示当前 context 没有认证主体。
	ErrUnauthenticated = errors.New("principal is not authenticated")
	// ErrNoWorkspace 表示当前主体未选择工作空间。
	ErrNoWorkspace = errors.New("workspace is not selected")
	// ErrNoPermission 表示当前主体缺少所需权限。
	ErrNoPermission = errors.New("permission denied")
)

Functions

func NewContext

func NewContext(ctx context.Context, principal *Principal) context.Context

NewContext 将 Principal 写入 context。

Types

type ContextPermissionChecker

type ContextPermissionChecker struct{}

ContextPermissionChecker 从 context 中读取 Principal 并完成权限校验。

func NewContextPermissionChecker

func NewContextPermissionChecker() *ContextPermissionChecker

NewContextPermissionChecker 创建 context 权限校验器。

func (*ContextPermissionChecker) Check

func (c *ContextPermissionChecker) Check(ctx context.Context, required ...string) error

Check 校验当前 Principal 是否拥有任一 required 权限。

func (*ContextPermissionChecker) ResolveWorkspace

func (c *ContextPermissionChecker) ResolveWorkspace(ctx context.Context, requested string) (string, error)

ResolveWorkspace 将请求 workspace 约束到当前 Principal 的 workspace。

普通用户省略 workspace 时自动使用当前 workspace,显式请求其他 workspace 时拒绝访问。全局超级管理员可以保留空 workspace 进行跨空间查询。

type PermissionChecker

type PermissionChecker interface {
	Check(ctx context.Context, required ...string) error
	ResolveWorkspace(ctx context.Context, requested string) (string, error)
}

PermissionChecker 校验当前 context 是否具备指定权限。

type Principal

type Principal struct {
	UserID        string   `json:"userId"`
	Username      string   `json:"username"`
	IsSuperAdmin  bool     `json:"isSuperAdmin"`
	Workspace     string   `json:"workspace"`
	Permissions   []string `json:"permissions"`
	Authenticated bool     `json:"authenticated"`
}

Principal 是控制面认证后在 context 中传递的用户身份。

func FromContext

func FromContext(ctx context.Context) (*Principal, bool)

FromContext 从 context 中读取 Principal。

type TokenParser

type TokenParser interface {
	Parse(ctx context.Context, token string) (*Principal, error)
}

TokenParser 解析访问令牌为 Principal。

type WorkspaceSelector

type WorkspaceSelector interface {
	Select(ctx context.Context, userID string, workspace string) (*Principal, error)
}

WorkspaceSelector 切换用户当前工作空间并返回新的 Principal。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL