Skip to content

Commit

Permalink
权限部份更改
Browse files Browse the repository at this point in the history
  • Loading branch information
Dot-Liu committed Aug 2, 2024
1 parent d26d7a4 commit 1c2e987
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 33 deletions.
20 changes: 11 additions & 9 deletions access/access.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@ import (
)

type Access struct {
Name string `yaml:"name" json:"name,omitempty"`
CName string `yaml:"cname" json:"cname,omitempty"`
Value string `yaml:"value" json:"value,omitempty"`
Apis []string `yaml:"apis" json:"apis,omitempty"`
Children []Access `yaml:"children" json:"children,omitempty"`
Name string `yaml:"name" json:"name,omitempty"`
CName string `yaml:"cname" json:"cname,omitempty"`
Value string `yaml:"value" json:"value,omitempty"`
Apis []string `yaml:"apis" json:"apis,omitempty"`
Dependents []string `yaml:"dependents" json:"dependents,omitempty"`
Children []Access `yaml:"children" json:"children,omitempty"`
}

var (
Expand Down Expand Up @@ -48,10 +49,11 @@ func formatAccess(as []Access) (map[string][]string, []Template) {
templates := make([]Template, 0, len(as))
for _, a := range as {
template := Template{
Name: a.Name,
CName: a.CName,
Value: a.Value,
Children: []Template{},
Name: a.Name,
CName: a.CName,
Value: a.Value,
Dependents: a.Dependents,
Children: []Template{},
}
if a.Children != nil {
childrenResult, childTemplate := formatAccess(a.Children)
Expand Down
36 changes: 20 additions & 16 deletions access/permit.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,24 @@ package access
import (
"fmt"

"github.com/eolinker/go-common/permit"

"github.com/eolinker/eosc"
)

var (
permits = eosc.BuildUntyped[string, *permit]()
permits = eosc.BuildUntyped[string, *permitAccess]()
)

type Template struct {
Name string `yaml:"name" json:"name,omitempty"`
CName string `yaml:"cname" json:"cname,omitempty"`
Value string `yaml:"value" json:"value,omitempty"`
Children []Template `yaml:"children" json:"children,omitempty"`
Name string `yaml:"name" json:"name,omitempty"`
CName string `yaml:"cname" json:"cname,omitempty"`
Value string `yaml:"value" json:"value,omitempty"`
Children []Template `yaml:"children" json:"children,omitempty"`
Dependents []string `yaml:"dependents" json:"dependents,omitempty"`
}

type permit struct {
type permitAccess struct {
group string
// permits 当前权限下的API列表
permits eosc.Untyped[string, []string]
Expand All @@ -27,8 +30,8 @@ type permit struct {
template []Template
}

func newPermit(group string, access []Access) *permit {
p := &permit{
func newPermit(group string, access []Access) *permitAccess {
p := &permitAccess{
group: group,
permits: eosc.BuildUntyped[string, []string](),
access: eosc.BuildUntyped[string, string](),
Expand All @@ -38,43 +41,44 @@ func newPermit(group string, access []Access) *permit {
return p
}

func (p *permit) Valid(access string) error {
func (p *permitAccess) Valid(access string) error {
_, has := p.access.Get(access)
if !has {
return fmt.Errorf("permit %s not found", access)
return fmt.Errorf("permitAccess %s not found", access)
}
return nil
}

func (p *permit) Add(as []Access) error {
func (p *permitAccess) Add(as []Access) error {
result, templates := formatAccess(as)
for k, vs := range result {
k = fmt.Sprintf("%s.%s", p.group, k)
p.permits.Set(k, vs)
for _, v := range vs {
p.access.Set(v, k)
}
permit.AddPermitRule(k, vs...)
}
p.template = templates
return nil
}

func (p *permit) GetTemplate() []Template {
func (p *permitAccess) GetTemplate() []Template {
return p.template
}

func (p *permit) GetPermits(access string) ([]string, error) {
func (p *permitAccess) GetPermits(access string) ([]string, error) {
perms, has := p.permits.Get(access)
if !has {
return nil, fmt.Errorf("permit %s not found", access)
return nil, fmt.Errorf("permitAccess %s not found", access)
}
return perms, nil
}

func (p *permit) AccessKeys() []string {
func (p *permitAccess) AccessKeys() []string {
return p.permits.Keys()
}

func GetPermit(group string) (*permit, bool) {
func GetPermit(group string) (*permitAccess, bool) {
return permits.Get(group)
}
11 changes: 6 additions & 5 deletions access/role.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,12 @@ var (
)

type Role struct {
Name string `yaml:"name" json:"name,omitempty"`
CName string `yaml:"cname" json:"cname,omitempty"`
Permits []string `yaml:"permits" json:"permits,omitempty"`
Supper bool `yaml:"supper" json:"supper,omitempty"`
Default bool `yaml:"default" json:"default,omitempty"`
Name string `yaml:"name" json:"name,omitempty"`
CName string `yaml:"cname" json:"cname,omitempty"`
Permits []string `yaml:"permits" json:"permits,omitempty"`
Supper bool `yaml:"supper" json:"supper,omitempty"`
Default bool `yaml:"default" json:"default,omitempty"`
Dependents []string `yaml:"dependents" json:"dependents,omitempty"`
}

func RoleAdd(roles map[string][]Role) {
Expand Down
7 changes: 4 additions & 3 deletions server/build.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,14 @@ package server

import (
"fmt"
"net/http"
"strings"

"github.com/eolinker/go-common/pm3"
"github.com/eolinker/go-common/register"
"github.com/eolinker/go-common/utils"
"github.com/gin-contrib/gzip"
"github.com/gin-gonic/gin"
"net/http"
"strings"
)

var (
Expand Down Expand Up @@ -72,7 +73,7 @@ func (i *imlServiceBuilder) Build() Server {
}
if ai, ok := p.(pm3.IPluginApis); ok {
for _, a := range ai.APis() {
middlewareHandlers := middlewareList.Check(http.MethodGet, a.Path())
middlewareHandlers := middlewareList.Check(a.Method(), a.Path())

handlers[p.Name()] = append(handlers[p.Name()], a)
engine.Group("/", middlewareHandlers...).Handle(a.Method(), a.Path(), a.Handler)
Expand Down

0 comments on commit 1c2e987

Please sign in to comment.