Files
c 04a9e5a72f 1、init project
2、完善部分功能
2025-10-18 06:38:51 +07:00

3.0 KiB

Permission Management

中文文档 | English

Set Permissions

// Set user permissions
stputil.SetPermissions(1000, []string{
    "user:read",
    "user:write",
    "admin:*",      // Wildcard: matches all admin permissions
})

Check Permissions

Single Permission

// Check if has permission
hasPermission := stputil.HasPermission(1000, "user:read")

Multiple Permissions (AND)

// Check if has all permissions
hasAll := stputil.HasPermissionsAnd(1000, []string{
    "user:read",
    "user:write",
})

Multiple Permissions (OR)

// Check if has any permission
hasAny := stputil.HasPermissionsOr(1000, []string{
    "admin:read",
    "admin:write",
})

Wildcard Support

// Set wildcard permissions
stputil.SetPermissions(1000, []string{
    "admin:*",          // All admin permissions
    "user:*:view",      // All user view permissions
    "*",                // All permissions
})

// Wildcard matching
stputil.HasPermission(1000, "admin:read")    // ✅ Match admin:*
stputil.HasPermission(1000, "admin:delete")  // ✅ Match admin:*
stputil.HasPermission(1000, "user:1:view")   // ✅ Match user:*:view

Get Permissions

// Get user permissions list
permissions, err := stputil.GetPermissions(1000)
for _, perm := range permissions {
    fmt.Println(perm)
}

Permission Patterns

Resource-based Permissions

"user:read"         // Read user
"user:write"        // Write user
"user:delete"       // Delete user
"user:*"            // All user operations

Hierarchical Permissions

"system:user:read"          // Read system users
"system:user:*"             // All system user operations
"system:*"                  // All system operations

Action-based Permissions

"create:post"       // Create post
"edit:post"         // Edit post
"delete:post"       // Delete post
"*:post"            // All post operations

Complete Example

package main

import (
    "github.com/click33/sa-token-go/core"
    "github.com/click33/sa-token-go/stputil"
    "github.com/click33/sa-token-go/storage/memory"
)

func main() {
    // Initialize
    stputil.SetManager(
        core.NewBuilder().
            Storage(memory.NewStorage()).
            Build(),
    )

    // Login
    token, _ := stputil.Login(1000)

    // Set permissions
    stputil.SetPermissions(1000, []string{
        "user:read",
        "user:write",
        "post:*",
        "admin:*",
    })

    // Check permissions
    if stputil.HasPermission(1000, "user:read") {
        println("✅ Can read user")
    }

    if stputil.HasPermission(1000, "post:delete") {
        println("✅ Can delete post (wildcard match)")
    }

    // Check multiple permissions
    if stputil.HasPermissionsAnd(1000, []string{"user:read", "user:write"}) {
        println("✅ Can read and write user")
    }
}