Files
token-go/examples/http-server.go
2023-05-13 15:25:54 +08:00

94 lines
2.1 KiB
Go

package main
import (
"fmt"
tokenGo "github.com/weloe/token-go"
"log"
"net/http"
)
var enforcer *tokenGo.Enforcer
type Auth struct {
}
func (m *Auth) GetRole(id string) []string {
var arr = make([]string, 2)
arr[1] = "user"
return arr
}
func (m *Auth) GetPermission(id string) []string {
var arr = make([]string, 2)
arr[1] = "user::get"
return arr
}
func main() {
var err error
// use default adapter
adapter := tokenGo.NewDefaultAdapter()
enforcer, err = tokenGo.NewEnforcer(adapter)
// set auth
enforcer.SetAuth(&Auth{})
// enable logger
enforcer.EnableLog()
if err != nil {
log.Fatal(err)
}
http.HandleFunc("/user/login", Login)
http.HandleFunc("/user/logout", Logout)
http.HandleFunc("/user/isLogin", IsLogin)
http.HandleFunc("/user/kickout", Kickout)
http.HandleFunc("/user/check", CheckAuth)
log.Fatal(http.ListenAndServe(":8081", nil))
}
func CheckAuth(w http.ResponseWriter, req *http.Request) {
ctx := tokenGo.NewHttpContext(req, w)
err := enforcer.CheckRole(ctx, "user")
if err != nil {
fmt.Fprintf(w, "CheckRole() error: %s\n", err)
return
}
err = enforcer.CheckPermission(ctx, "user::get")
if err != nil {
fmt.Fprintf(w, "CheckPermission() error: %s\n", err)
return
}
fmt.Fprintf(w, "you have authorization")
}
func Login(w http.ResponseWriter, req *http.Request) {
token, err := enforcer.Login("1", tokenGo.NewHttpContext(req, w))
if err != nil {
fmt.Fprintf(w, "Login error: %s\n", err)
}
fmt.Fprintf(w, "token: %s\n", token)
}
func Logout(w http.ResponseWriter, req *http.Request) {
err := enforcer.Logout(tokenGo.NewHttpContext(req, w))
if err != nil {
fmt.Fprintf(w, "Logout error: %s\n", err)
}
fmt.Fprintf(w, "logout success")
}
func IsLogin(w http.ResponseWriter, req *http.Request) {
login, err := enforcer.IsLogin(tokenGo.NewHttpContext(req, w))
if err != nil {
fmt.Fprintf(w, "IsLogin() = %v: %v", login, err)
}
fmt.Fprintf(w, "IsLogin() = %v", login)
}
func Kickout(w http.ResponseWriter, req *http.Request) {
err := enforcer.Kickout(req.URL.Query().Get("id"), "")
if err != nil {
fmt.Fprintf(w, "error: %s\n", err)
}
fmt.Fprintf(w, "logout success")
}