-
Notifications
You must be signed in to change notification settings - Fork 63
/
main.go
70 lines (63 loc) · 2.27 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package main
import (
"fmt"
"time"
"github.com/1046102779/grbac/conf"
. "github.com/1046102779/grbac/logger"
_ "github.com/1046102779/grbac/routers"
metrics "github.com/rcrowley/go-metrics"
"github.com/smallnest/rpcx"
"github.com/smallnest/rpcx/codec"
"github.com/smallnest/rpcx/plugin"
"github.com/1046102779/grbac/models"
"github.com/astaxie/beego"
)
func startRPCService(rpcAddr string, etcdAddr string, grbacServer *models.GrbacServer) {
server := rpcx.NewServer()
rplugin := &plugin.EtcdRegisterPlugin{
ServiceAddress: "tcp@" + rpcAddr,
EtcdServers: []string{etcdAddr},
BasePath: fmt.Sprintf("/%s/%s", beego.BConfig.RunMode, "rpcx"),
Metrics: metrics.NewRegistry(),
Services: make([]string, 0),
UpdateInterval: time.Minute,
}
rplugin.Start()
server.PluginContainer.Add(rplugin)
server.PluginContainer.Add(plugin.NewMetricsPlugin())
server.RegisterName("grbacs", grbacServer, "weight=1&m=devops")
server.ServerCodecFunc = codec.NewProtobufServerCodec
server.Serve("tcp", rpcAddr)
}
func main() {
if beego.BConfig.RunMode == "dev" {
beego.BConfig.WebConfig.DirectoryIndex = true
beego.BConfig.WebConfig.StaticDir["/swagger"] = "swagger"
}
// 1. 加载路由树数据
if err := models.LoadMapTree(); err != nil {
Logger.Error(err.Error())
}
// 打印初始化的树
models.PrintTree()
// 对于存储在Redis集群中的数据,一般情况下,只需要加载一次
// 以后重启权限服务,不需要再次加载
// 所以这是一个python脚本, 脚本路径:/data/home/chendonghai/data/python/grbac_init_data_mysql_to_redis.py
// 2. 加载角色与功能的Redis存储 数据结构:SET集合
// 3. 加载用户与角色的Redis存储 数据结构:SET集合
// 4. 加载<用户-功能ID,实体ID>的Redis存储 数据结构:SET集合
// 备注:目前只有公司ID
// 5. 加载白名单的Redis存储 数据结构:LIST列表
// 6. 加载<域,动作,实体>列表在redis缓存中
// 数据结构集合, 格式:<用户ID-功能ID, 实体SET>
/*
if err := LoadEntity(); err != nil {
}
*/
if _, err := models.LoadWhiteList(0, 300); err != nil {
Logger.Error(err.Error())
}
fmt.Println("main starting...")
go startRPCService(conf.RpcAddr, conf.EtcdAddr, &models.GrbacServer{})
beego.Run()
}