Ai
13 Star 35 Fork 40

go-course/go11

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
model.go 1.38 KB
一键复制 编辑 原始数据 按行查看 历史
Mr.Yu 提交于 2023-08-05 16:58 +08:00 . 补充分布式鉴权
package token
import (
"fmt"
"time"
"github.com/rs/xid"
)
func NewToken() *Token {
return &Token{
AccessToken: xid.New().String(),
RefreshToken: xid.New().String(),
// 默认10分钟过期
AccessTokenExpiredSecond: 10 * 60,
// 默认40分钟
RefreshTokenExpiredSecond: 10 * 60 * 4,
IssueAt: time.Now().Unix(),
}
}
// 判断ak是否过期
func (t *Token) IsAcccessTokenExpired() bool {
d := time.Since(t.AcccessTokenExpiredTime())
return d.Minutes() > 0
}
func (t *Token) AcccessTokenExpiredTime() time.Time {
return t.IssueTime().Add(time.Duration(t.AccessTokenExpiredSecond * int64(time.Second)))
}
func (t *Token) IssueTime() time.Time {
return time.Unix(t.IssueAt, 0)
}
// 用户对 服务(cmdb), 那个资源(secret)的 那个操作是否有权限(list)
func (t *Token) HasPerm(servce, secret, action string) error {
if t.Roles == nil && len(t.Roles.Items) > 0 {
return nil
}
// 每个角色挨着判断
for i := range t.Roles.Items {
r := t.Roles.Items[i]
if r.HasPerm(servce, secret, action) {
return nil
}
}
return fmt.Errorf("无权限")
}
// 判断ak是否过期
func (t *Token) IsRefreshTokenExpired() bool {
d := time.Since(t.RefreshTokenExpiredTime())
return d.Minutes() > 0
}
func (t *Token) RefreshTokenExpiredTime() time.Time {
return t.IssueTime().Add(time.Duration(t.RefreshTokenExpiredSecond * int64(time.Second)))
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/go-course/go11.git
git@gitee.com:go-course/go11.git
go-course
go11
go11
f4276bbab689

搜索帮助