mirror of
https://github.com/veops/oneterm.git
synced 2025-10-08 00:30:12 +08:00
127 lines
2.6 KiB
Go
127 lines
2.6 KiB
Go
package acl
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
const (
|
|
WRITE = "write"
|
|
DELETE = "delete"
|
|
READ = "read"
|
|
GRANT = "grant"
|
|
)
|
|
|
|
var (
|
|
AllPermissions = []string{WRITE, DELETE, READ, GRANT}
|
|
)
|
|
|
|
type Role struct {
|
|
Permissions []string `json:"permissions"`
|
|
}
|
|
|
|
type ResourceResult struct {
|
|
Groups []any `json:"groups"`
|
|
Resources []*Resource `json:"resources"`
|
|
}
|
|
type Resource struct {
|
|
AppID int `json:"app_id"`
|
|
CreatedAt string `json:"created_at"`
|
|
Deleted bool `json:"deleted"`
|
|
DeletedAt string `json:"-"`
|
|
ResourceId int `json:"id"`
|
|
Name string `json:"name"`
|
|
Permissions []string `json:"permissions"`
|
|
ResourceTypeID int `json:"resource_type_id"`
|
|
UID int `json:"uid"`
|
|
UpdatedAt string `json:"updated_at"`
|
|
}
|
|
|
|
type Perm struct {
|
|
Name string `json:"name"`
|
|
Rid int `json:"rid"`
|
|
}
|
|
|
|
type ResourcePermissionsRespItem struct {
|
|
Perms []*Perm `json:"perms"`
|
|
}
|
|
|
|
type Acl struct {
|
|
Uid int `json:"uid"`
|
|
UserName string `json:"userName"`
|
|
Rid int `json:"rid"`
|
|
RoleName string `json:"roleName"`
|
|
ParentRoles []string `json:"parentRoles"`
|
|
ChildRoles []string `json:"childRoles"`
|
|
NickName string `json:"nickName"`
|
|
}
|
|
|
|
type Session struct {
|
|
Uid int `json:"uid"`
|
|
Acl Acl `json:"acl"`
|
|
Cookie *http.Cookie `json:"raw"`
|
|
}
|
|
|
|
func (s *Session) GetUid() int {
|
|
return s.Uid
|
|
}
|
|
|
|
func (s *Session) GetRid() int {
|
|
return s.Acl.Rid
|
|
}
|
|
|
|
func (s *Session) GetUserName() string {
|
|
return s.Acl.UserName
|
|
}
|
|
|
|
func (a *Acl) GetUserName(ctx *gin.Context) string {
|
|
res, exist := ctx.Get("session")
|
|
if exist {
|
|
if v, ok := res.(*Session); ok {
|
|
return v.GetUserName()
|
|
}
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (a *Acl) GetUserInfo(ctx *gin.Context) (any, error) {
|
|
res, exist := ctx.Get("session")
|
|
if exist {
|
|
if v, ok := res.(*Session); ok {
|
|
return v, nil
|
|
}
|
|
}
|
|
return res, fmt.Errorf("no session")
|
|
}
|
|
|
|
type UserInfoResp struct {
|
|
Result UserInfoRespResult `json:"result"`
|
|
}
|
|
|
|
type UserInfoRespResult struct {
|
|
Avatar string `json:"avatar"`
|
|
Email string `json:"email"`
|
|
Name string `json:"name"`
|
|
Rid int `json:"rid"`
|
|
Role Role `json:"role"`
|
|
UID int `json:"uid"`
|
|
Username string `json:"username"`
|
|
}
|
|
|
|
type AuthWithKeyResp struct {
|
|
User AuthWithKeyResult `json:"user"`
|
|
}
|
|
|
|
type AuthWithKeyResult struct {
|
|
Avatar string `json:"avatar"`
|
|
Email string `json:"email"`
|
|
Name string `json:"name"`
|
|
Rid int `json:"rid"`
|
|
Role Role `json:"role"`
|
|
UID int `json:"uid"`
|
|
Username string `json:"username"`
|
|
ParentRoles []string `json:"parentRoles"`
|
|
}
|