mirror of https://github.com/casbin/casnode.git
160 lines
3.3 KiB
Go
160 lines
3.3 KiB
Go
// Copyright 2020 The casbin Authors. All Rights Reserved.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package object
|
|
|
|
import "sync"
|
|
|
|
type Plane struct {
|
|
Id string `xorm:"varchar(50) notnull pk" json:"id"`
|
|
Name string `xorm:"varchar(50)" json:"name"`
|
|
Sorter int `xorm:"int" json:"-"`
|
|
CreatedTime string `xorm:"varchar(40)" json:"createdTime"`
|
|
Image string `xorm:"varchar(200)" json:"image"`
|
|
BackgroundColor string `xorm:"varchar(20)" json:"backgroundColor"`
|
|
Color string `xorm:"varchar(20)" json:"color"`
|
|
Visible bool `xorm:"bool" json:"-"`
|
|
}
|
|
|
|
func GetPlanes() []*Plane {
|
|
planes := []*Plane{}
|
|
err := adapter.Engine.Asc("sorter").Where("visible = ?", 1).Find(&planes)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return planes
|
|
}
|
|
|
|
func GetAllPlanes() []*AdminPlaneInfo {
|
|
planes := []*Plane{}
|
|
err := adapter.Engine.Asc("sorter").Find(&planes)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
res := []*AdminPlaneInfo{}
|
|
for _, v := range planes {
|
|
temp := AdminPlaneInfo{
|
|
Plane: *v,
|
|
Sorter: v.Sorter,
|
|
Visible: v.Visible,
|
|
NodesNum: GetPlaneNodesNum(v.Id),
|
|
}
|
|
res = append(res, &temp)
|
|
}
|
|
return res
|
|
}
|
|
|
|
func GetPlane(id string) *Plane {
|
|
plane := Plane{Id: id}
|
|
existed, err := adapter.Engine.Get(&plane)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
if existed {
|
|
return &plane
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func GetPlaneAdmin(id string) *AdminPlaneInfo {
|
|
plane := Plane{Id: id}
|
|
existed, err := adapter.Engine.Get(&plane)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
planeNode := GetNodeFromPlane(plane.Id)
|
|
res := AdminPlaneInfo{
|
|
Plane: plane,
|
|
Sorter: plane.Sorter,
|
|
Visible: plane.Visible,
|
|
NodesNum: len(planeNode),
|
|
Nodes: planeNode,
|
|
}
|
|
|
|
if existed {
|
|
return &res
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
func AddPlane(plane *Plane) bool {
|
|
affected, err := adapter.Engine.Insert(plane)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return affected != 0
|
|
}
|
|
|
|
func UpdatePlane(id string, plane *Plane) bool {
|
|
if GetPlane(id) == nil {
|
|
return false
|
|
}
|
|
|
|
affected, err := adapter.Engine.Id(id).AllCols().Update(plane)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return affected != 0
|
|
}
|
|
|
|
func GetPlaneList() []*PlaneWithNodes {
|
|
planes := GetPlanes()
|
|
|
|
var wg sync.WaitGroup
|
|
res := make([]*PlaneWithNodes, len(planes))
|
|
for k, plane := range planes {
|
|
plane := plane
|
|
k := k
|
|
wg.Add(1)
|
|
go func() {
|
|
defer wg.Done()
|
|
temp := &PlaneWithNodes{
|
|
Plane: plane,
|
|
Nodes: GetNodeFromPlane(plane.Id),
|
|
}
|
|
res[k] = temp
|
|
}()
|
|
}
|
|
wg.Wait()
|
|
|
|
return res
|
|
}
|
|
|
|
func DeletePlane(id string) bool {
|
|
affected, err := adapter.Engine.Id(id).Delete(&Plane{})
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return affected != 0
|
|
}
|
|
|
|
func GetPlaneNodesNum(id string) int {
|
|
node := new(Node)
|
|
total, err := adapter.Engine.Where("plane_id = ?", id).Count(node)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
|
|
return int(total)
|
|
}
|