Explorar el Código

add: 权限验证

zoie hace 2 años
padre
commit
2cc0394c27
Se han modificado 4 ficheros con 66 adiciones y 2 borrados
  1. 35 0
      Nats/Nats.go
  2. 2 0
      conf/config.go
  3. 4 2
      routers/WorkOrder.go
  4. 25 0
      routers/filter.go

+ 35 - 0
Nats/Nats.go

@@ -118,3 +118,38 @@ func AddUserLogs(T_uuid, T_class, T_title string, T_txt interface{}) {
 	// 发布-订阅 模式,向 test1 发布一个 `Hello World` 数据
 	_ = Nats.Publish("Cold_User_AddUserLogs", b)
 }
+
+func CheckUserPermissions(Power_Id int, Req_Url string) bool {
+	type T_Req struct {
+		Power_Id int    `xml:"Power_Id"` // 权限id
+		Req_Url  string `xml:"Req_Url"`  // 请求url
+	}
+	t_Req := T_Req{
+		Power_Id: Power_Id,
+		Req_Url:  Req_Url,
+	}
+	b, _ := msgpack.Marshal(&t_Req)
+
+	// 请求-响应, 向 verification 发布一个 `ToKey` 请求数据,设置超时间3秒,如果有多个响应,只接收第一个收到的消息
+	msg, err := Nats.Request("Cold_User_CheckUserPermissions", b, 3*time.Second)
+	fmt.Printf("CheckUserPermissions : %s\n", string(msg.Data))
+
+	if err != nil {
+		return false
+	}
+
+	type T_R struct {
+		Code int16  `xml:"Code"`
+		Msg  string `xml:"Msg"`
+		Pass bool   `xml:"Pass"` // 泛型
+	}
+
+	var t_R T_R
+
+	err = msgpack.Unmarshal(msg.Data, &t_R)
+	if err != nil {
+		return false
+	}
+
+	return t_R.Pass
+}

+ 2 - 0
conf/config.go

@@ -18,6 +18,8 @@ var Server_test = false
 var HTTPPort, _ = beego.AppConfig.String("HTTPPort")
 var AppName, _ = beego.AppConfig.String("appname")
 
+var Version, _ = beego.AppConfig.String("Version")
+
 var Page_size = 10
 
 // Mysql

+ 4 - 2
routers/WorkOrder.go

@@ -1,12 +1,13 @@
 package routers
 
 import (
+	"Cold_WorkOrder/conf"
 	"Cold_WorkOrder/controllers"
 	beego "github.com/beego/beego/v2/server/web"
 )
 
 func init() {
-	var version = "/v3"
+	var version = conf.Version
 
 	// 工单管理
 	beego.Router(version+"/WorkOrder/List", &controllers.WorkOrderController{}, "*:List")           // 列表
@@ -15,5 +16,6 @@ func init() {
 	beego.Router(version+"/WorkOrder/Add", &controllers.WorkOrderController{}, "*:Add")             // 添加
 	beego.Router(version+"/WorkOrder/Up", &controllers.WorkOrderController{}, "*:Up")               // 编辑
 	beego.Router(version+"/WorkOrder/Del", &controllers.WorkOrderController{}, "*:Del")             // 删除
-
+	//过滤器,拦截所有请求
+	beego.InsertFilter("/*", beego.BeforeRouter, FilterRBAC)
 }

+ 25 - 0
routers/filter.go

@@ -0,0 +1,25 @@
+package routers
+
+import (
+	"Cold_WorkOrder/Nats"
+	"Cold_WorkOrder/lib"
+	"github.com/beego/beego/v2/server/web/context"
+)
+
+func FilterRBAC(ctx *context.Context) {
+
+	b_, admin := Nats.Verification(ctx.GetCookie("User_tokey"))
+	if !b_ {
+		ctx.Output.JSON(lib.JSONS{Code: 201, Msg: "请重新登陆!"}, true, false)
+		return
+	}
+
+	flag := Nats.CheckUserPermissions(admin.T_power, ctx.Request.URL.Path)
+
+	if !flag {
+		data := lib.JSONS{Code: 201, Msg: "无权访问!"}
+		ctx.Output.JSON(data, true, false)
+		return
+	}
+
+}