1 Star 0 Fork 0

dpnogo / iam

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
authorizer.go 2.43 KB
一键复制 编辑 原始数据 按行查看 历史
dpnogo 提交于 2022-03-07 14:16 . 验证用户是否能够访问资源
package authorization
import (
authzv1 "github.com/marmotedu/api/authz/v1"
"github.com/ory/ladon"
)
// 功能:创建验证人结构 并构建验证权限
// 授权人 外部调用
type Authorizer struct {
// warden(管理人)
warden ladon.Warden //ladon 验证的接口[IsAllowed(r *Request) error] 根据请求判断是否有权限
}
// 根据 权限相关接口 初始化授权对象 authorizationClient 实际上注意目的就是获取策略(从cache中得到)
func NewAuthorizer(authorizationClient AuthorizationInterface)*Authorizer {
return &Authorizer{
warden: &ladon.Ladon{ //构建 如何进行认证的结构体
//返回 ladon.Manager接口 传入authorizationClient接口 (使用其得到用户权限)
Manager: NewPolicyManager(authorizationClient), // 根据Username得到改用户所有权限
// 用来记录被拒绝的授权请求和被允许的授权请求
// AuditLogger: NewAuditLogger(authorizationClient), //AuditLogger 是一个 interface 该 AuditLogger 会在授权时打印调用的策略到标准错误
AuditLogger: &ladon.AuditLoggerInfo{}, // 会默认输出到 stderr
},
}
}
// 验证函数
func (a *Authorizer) Authorize(request *ladon.Request) *authzv1.Response {
// request 中 在controller将username添加到 request.Context中了
// 在 ladon 包中如何 执行 IsAllowed 的
/*
func (l *Ladon) IsAllowed(r *Request) (err error) {
// Manager 相关 FindRequestCandidates即外部实现的得到username用户所有权限
policies, err := l.Manager.FindRequestCandidates(r)
if err != nil { //
go l.metric().RequestProcessingError(*r, nil, err)
return err
}
// 根据权限 通过用户去验证
return l.DoPoliciesAllow(r, policies)
}
IsAllowed 会调用 DoPoliciesAllow(r, policies) 函数进行权限校验。
如果权限校验不通过(请求在指定条件下不能够对资源做指定操作),就调用 LogRejectedAccessRequest 函数记录拒绝的请求,
并返回值为非 nil 的 error,error 中记录了授权失败的错误信息。
如果权限校验通过,则调用 LogGrantedAccessRequest 函数记录允许的请求,并返回值为 nil 的 error。
DoPoliciesAllow 在 ladon.go中
*/
// todo 出现问题
if err:=a.warden.IsAllowed(request);err!=nil{
// fmt.Println("验证权限************err",err)
return &authzv1.Response{
Denied: true,
Reason: err.Error(),
}
}
return &authzv1.Response{
Allowed: true,
}
}
1
https://gitee.com/GomiTo/iam.git
git@gitee.com:GomiTo/iam.git
GomiTo
iam
iam
455e706b39fb

搜索帮助