Documentation ¶
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // Rbac ErrorTokenSignKeyInvalid = "token signkey invalid" ErrorRefreshTokenExpireTimeInvalid = "token refresh_token expiretime invalid" ErrorTokenIssueTypeInvalid = "token issue type invalid" ErrorPolicyFilePathInvalid = "policy file path invaild" // Jwt ErrorJwtSigningMethodInvaild = "token signing method invalid" ErrorJwtParseInvaild = "token parse invaid" ErrorJwtClaimsInvaild = "token claim invaid" // Casbin ErrorCasbinEnforceInvaild = "casbin enforce invaild" )
Functions ¶
This section is empty.
Types ¶
type Casbin ¶
type Casbin struct { PolicyFilePath string Domain string Enforcer *casbin.Enforcer Adapter persist.Adapter }
func (*Casbin) SaveAllPolicyCsv ¶ added in v1.1.1
func (c *Casbin) SaveAllPolicyCsv(ups []UriPolicy, rps []RolePolicy) error
更新Policy.csv文件
Example ¶
var ( uriPolicys = []UriPolicy{ { Domain: "manager", Role: "admin1", Path: "/user", Method: "POST", }, { Domain: "manager", Role: "admin1", Path: "/user", Method: "GET", }, { Domain: "manager", Role: "admin1", Path: "/user", Method: "PUT", }, { Domain: "manager", Role: "admin1", Path: "/user", Method: "DELETE", }, { Domain: "manager", Role: "admin1", Path: "/users", Method: "GET", }, { Domain: "www", Role: "admin1", Path: "/article", Method: "GET", }, { Domain: "www", Role: "userGroup1", Path: "/article", Method: "GET", }, } rolePolicys = []RolePolicy{ { Role: "admin1", Domain: "manager", }, { ParentRole: "admin1", Role: "admin2", Domain: "manager", }, { ParentRole: "admin1", Role: "userGroup1", Domain: "www", }, } sets = Settings{ TokenSignKey: []byte("gVoiG1fbXf65osbjfi33MZre"), TokenIssuer: "lgcgo.com", PolicyFilePath: "examples/policy.csv", } r *Rbac err error ) if r, err = New(sets); err != nil { panic(err) } if err = r.Casbin.SaveAllPolicyCsv(uriPolicys, rolePolicys); err != nil { panic(err) }
Output:
type Claims ¶
type Claims struct { IssueType string `json:"ist"` // 签发类型, grant=授予,renew=刷新 IssueRole string `json:"isr"` // 签发角色, 签发的角色名称(允许多角色) pkg.RegisteredClaims }
声明格式 RegisteredClaims 包含了JWT给出的7个官方字段 - iss (issuer):发布者,通常填域名即可 - sub (subject):主题, - iat (Issued At):生成签名的时间 - exp (expiration time):签名过期时间 - aud (audience):观众,相当于接受者 - nbf (Not Before):生效时间 - jti (JWT ID):编号
type IssueClaims ¶
type IssueClaims struct { Type string // 签发类型,这里 grant=授权, renew=刷新 Role string // 签发角色,相同角色具备相同的权限 Subject string // 签发主题,一般用使用用户的唯一标识 Audience []string // 签发授众,例如指定的浏览器、应用标识等 }
签发字段
type Jwt ¶
type Jwt struct {
// contains filtered or unexported fields
}
func (*Jwt) IssueToken ¶
签发Token
type Rbac ¶
func (*Rbac) Authorization ¶
签发授权(oauth2密码模式)
Example ¶
var ( sets = Settings{ TokenSignKey: []byte("gVoiG1fbXf65osbjfi33MZre"), TokenIssuer: "lgcgo.com", PolicyFilePath: "examples/policy.csv", } r *Rbac out *Token err error ) if r, err = New(sets); err != nil { panic(err) } if out, err = r.Authorization("uid001", "subAdmin"); err != nil { panic(err) } outJson, err := json.MarshalIndent(out, "", " ") fmt.Println(string(outJson))
Output: { "AccessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3QiOiJncmFudCIsImlzciI6InN1YkFkbWluIiwiaXNzIjoibGdjZ28uY29tIiwic3ViIjoidWlkMDAxIiwiZXhwIjoxNjU3NDM1MzM0LCJuYmYiOjE2NTczNDg5MzQsImlhdCI6MTY1NzM0ODkzNH0.KfU0WgfT33v_5-HqqCryPCRC512dV2CTQ_uXCh5dJMM", "TokenType": "Bearer", "ExpiresIn": 86400, "RefreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3QiOiJyZW5ldyIsImlzciI6InN1YkFkbWluIiwiaXNzIjoibGdjZ28uY29tIiwic3ViIjoidWlkMDAxIiwiZXhwIjoxNjU3NjA4MTM0LCJuYmYiOjE2NTczNDg5MzQsImlhdCI6MTY1NzM0ODkzNH0.cd2-AplZwnu4CbhAZvSwRdWYESWurHTZlbXMSDta4wA" }
func (*Rbac) RefreshAuthorization ¶
刷新授权
Example ¶
var ( sets = Settings{ TokenSignKey: []byte("gVoiG1fbXf65osbjfi33MZre"), TokenIssuer: "lgcgo.com", PolicyFilePath: "examples/policy.csv", } r *Rbac token *Token out *Token err error ) if r, err = New(sets); err != nil { panic(err) } if token, err = r.Authorization("uid001", "subAdmin"); err != nil { panic(err) } if out, err = r.RefreshAuthorization(token.RefreshToken); err != nil { panic(err) } outJson, err := json.MarshalIndent(out, "", " ") fmt.Println(string(outJson))
Output: { "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3QiOiJncmFudCIsImlzciI6InN1YkFkbWluIiwiaXNzIjoibGdjZ28uY29tIiwic3ViIjoidWlkMDAxIiwiZXhwIjoxNjU3NTk2NzM2LCJuYmYiOjE2NTc1MTAzMzYsImlhdCI6MTY1NzUxMDMzNn0.jtcnM1Gvcs3XQFl7xdDU7-qnnL90RyhfljAqKE_DmsA", "tokenType": "Bearer", "expiresIn": 86400, "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3QiOiJyZW5ldyIsImlzciI6InN1YkFkbWluIiwiaXNzIjoibGdjZ28uY29tIiwic3ViIjoidWlkMDAxIiwiZXhwIjoxNjU3NzY5NTM2LCJuYmYiOjE2NTc1MTAzMzYsImlhdCI6MTY1NzUxMDMzNn0.xFpO99WrCxmrrvi6rlDy2DdAFdT6-DkdMWaA-QXIQsU" }
func (*Rbac) VerifyRequest ¶
验证角色请求
Example ¶
var ( sets = Settings{ TokenSignKey: []byte("gVoiG1fbXf65osbjfi33MZre"), TokenIssuer: "lgcgo.com", PolicyFilePath: "examples/policy.csv", } r *Rbac // out map[string]interface{} err error ) if r, err = New(sets); err != nil { panic(err) } r.Casbin.SetDomain("www") err = r.VerifyRequest("/article", "GET", "role::admin1") if err != nil { fmt.Println(err.Error()) } fmt.Println()
Output:
func (*Rbac) VerifyToken ¶
验证Token
Example ¶
var ( sets = Settings{ TokenSignKey: []byte("gVoiG1fbXf65osbjfi33MZre"), TokenIssuer: "lgcgo.com", PolicyFilePath: "examples/policy.csv", } r *Rbac token *Token out map[string]interface{} err error ) if r, err = New(sets); err != nil { panic(err) } if token, err = r.Authorization("uid001", "subAdmin"); err != nil { panic(err) } if out, err = r.VerifyToken(token.AccessToken); err != nil { panic(err) } outJson, err := json.MarshalIndent(out, "", " ") fmt.Println(string(outJson))
Output: { "exp": 1657596869, "iat": 1657510469, "isr": "subAdmin", "iss": "lgcgo.com", "ist": "grant", "nbf": 1657510469, "sub": "uid001" }
type RolePolicy ¶
角色关系政策
type Settings ¶
type Settings struct { DefaultDomain string PolicyFilePath string // 可选项,授权政策文件路径;当使用默认的adapter时为必填 TokenSignKey []byte // 必填项,Jwt加密字符串,使用随机的字符串即可 TokenIssuer string // 选填项,Jwt的签发者,如lgcgo.com AccessTokenExpireTime time.Duration // 可选项,access_token过期时间,默认24小时 RefreshTokenExpireTime time.Duration // 可选项,refresh_token过期时间,默认是access_token过期时间的3倍数 }
设置项
Click to show internal directories.
Click to hide internal directories.