Update Readme.md

This commit is contained in:
weloe
2023-05-13 15:15:55 +08:00
parent ab16d567f8
commit 7905f81270
2 changed files with 122 additions and 0 deletions

View File

@@ -74,6 +74,12 @@ func Kickout(w http.ResponseWriter, req *http.Request) {
## Custom TokenConfig ## Custom TokenConfig
The same user can only log in once: `IsConcurrent = false && IsShare = false`
The same user logs in multiple times and shares a token: `IsConcurrent = true && IsShare = false`
Multiple logins of the same user to multiple tokens: `IsConcurrent = true && IsShare = true`
```go ```go
import ( import (
"fmt" "fmt"
@@ -102,4 +108,88 @@ func main() {
enforcer, err = tokenGo.NewEnforcer(adapter, tokenConfig) enforcer, err = tokenGo.NewEnforcer(adapter, tokenConfig)
} }
``` ```
You can also configure it using a yml or ini file like this
[token-go/token_conf.ini at master · weloe/token-go · GitHub](https://github.com/weloe/token-go/blob/master/examples/token_conf.ini)
[token-go/token_conf.yaml at master · weloe/token-go · GitHub](https://github.com/weloe/token-go/blob/master/examples/token_conf.yaml)
Then use `enforcer, err = tokenGo.NewEnforcer(adapter, filepath)` to init.
## Authorization
A simple permission verification method is also provided
```go
type ACL interface {
GetPermission(id string) []string
}
```
```go
type RBAC interface {
GetRole(id string) []string
}
```
Implement either of these two interfaces and call `enforcer.SetAuth(model)`
After that, you can use these two APIs for permission verification
``` go
// implement RBAC
CheckRole(ctx ctx.Context, role string) error
// implement ACL
CheckPermission(ctx ctx.Context, permission string) error
```
### example
```go
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/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")
}
```
## Api
[token_go package - github.com/weloe/token-go - Go Packages](https://pkg.go.dev/github.com/weloe/token-go#section-documentation)

View File

@@ -9,11 +9,27 @@ import (
var enforcer *tokenGo.Enforcer 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() { func main() {
var err error var err error
// use default adapter // use default adapter
adapter := tokenGo.NewDefaultAdapter() adapter := tokenGo.NewDefaultAdapter()
enforcer, err = tokenGo.NewEnforcer(adapter) enforcer, err = tokenGo.NewEnforcer(adapter)
// set auth
enforcer.SetAuth(&Auth{})
// enable logger // enable logger
enforcer.EnableLog() enforcer.EnableLog()
if err != nil { if err != nil {
@@ -24,10 +40,26 @@ func main() {
http.HandleFunc("/user/logout", Logout) http.HandleFunc("/user/logout", Logout)
http.HandleFunc("/user/isLogin", IsLogin) http.HandleFunc("/user/isLogin", IsLogin)
http.HandleFunc("/user/kickout", Kickout) http.HandleFunc("/user/kickout", Kickout)
http.HandleFunc("/user/check", CheckAuth)
log.Fatal(http.ListenAndServe(":8081", nil)) 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) { func Login(w http.ResponseWriter, req *http.Request) {
token, err := enforcer.Login("1", tokenGo.NewHttpContext(req, w)) token, err := enforcer.Login("1", tokenGo.NewHttpContext(req, w))
if err != nil { if err != nil {