Browse Source

修复了api唯一key关联的bug,修复了角色删除失败的bug

pixel 4 years ago
parent
commit
6dd70d2a76

+ 1 - 1
server/api/v1/sys_authority.go

@@ -41,7 +41,7 @@ func DeleteAuthority(c *gin.Context) {
 	var a model.SysAuthority
 	_ = c.ShouldBindJSON(&a)
 	//删除角色之前需要判断是否有用户正在使用此角色
-	err := service.DeleteAuthority(a)
+	err := service.DeleteAuthority(&a)
 	if err != nil {
 		response.FailWithMessage(fmt.Sprintf("删除失败,%v", err), c)
 	} else {

+ 1 - 1
server/model/response/sys_casbin.go

@@ -1,5 +1,5 @@
 package response
 
 type PolicyPathResponse struct {
-	Paths []string `json:"paths"`
+	Paths []map[string]string `json:"paths"`
 }

+ 1 - 1
server/service/sys_authority.go

@@ -24,7 +24,7 @@ func CreateAuthority(auth model.SysAuthority) (err error, authority model.SysAut
 // @param     auth            model.SysAuthority
 // @return                    error
 // 删除角色
-func DeleteAuthority(auth model.SysAuthority) (err error) {
+func DeleteAuthority(auth *model.SysAuthority) (err error) {
 	err = global.GVA_DB.Where("authority_id = ?", auth.AuthorityId).Find(&model.SysUser{}).Error
 	if err == nil {
 		err = errors.New("此角色有用户正在使用禁止删除")

+ 12 - 10
server/service/sys_casbin.go

@@ -17,7 +17,7 @@ import (
 // @param     authorityId      string
 // @param     casbinInfos      []CasbinInfo
 // @return                     error
-func  UpdateCasbin(authorityId string, casbinInfos []request.CasbinInfo) error {
+func UpdateCasbin(authorityId string, casbinInfos []request.CasbinInfo) error {
 	ClearCasbin(0, authorityId)
 	for _, v := range casbinInfos {
 		cm := model.CasbinModel{
@@ -40,7 +40,7 @@ func  UpdateCasbin(authorityId string, casbinInfos []request.CasbinInfo) error {
 // @auth                     (2020/04/05  20:22)
 // @param     cm              model.CasbinModel
 // @return                    bool
-func  AddCasbin(cm model.CasbinModel) bool {
+func AddCasbin(cm model.CasbinModel) bool {
 	e := Casbin()
 	return e.AddPolicy(cm.AuthorityId, cm.Path, cm.Method)
 }
@@ -53,9 +53,9 @@ func  AddCasbin(cm model.CasbinModel) bool {
 // @param     oldMethod        string
 // @param     newMethod        string
 // @return                     error
-func  UpdateCasbinApi(oldPath string, newPath string, oldMethod string, newMethod string) error {
+func UpdateCasbinApi(oldPath string, newPath string, oldMethod string, newMethod string) error {
 	var cs []model.CasbinModel
-	err := global.GVA_DB.Table("casbin_rule").Where("v1 = ? AND v2 = ?", oldPath,oldMethod).Find(&cs).Updates(map[string]string{
+	err := global.GVA_DB.Table("casbin_rule").Where("v1 = ? AND v2 = ?", oldPath, oldMethod).Find(&cs).Updates(map[string]string{
 		"v1": newPath,
 		"v2": newMethod,
 	}).Error
@@ -67,14 +67,16 @@ func  UpdateCasbinApi(oldPath string, newPath string, oldMethod string, newMetho
 // @auth                     (2020/04/05  20:22)
 // @param     authorityId     string
 // @return                    []string
-func  GetPolicyPathByAuthorityId(authorityId string) []string {
+func GetPolicyPathByAuthorityId(authorityId string) (pathMaps []map[string]string) {
 	e := Casbin()
-	var pathList []string
 	list := e.GetFilteredPolicy(0, authorityId)
 	for _, v := range list {
-		pathList = append(pathList, v[1])
+		pathMaps = append(pathMaps, map[string]string{
+			"path":   v[1],
+			"method": v[2],
+		})
 	}
-	return pathList
+	return pathMaps
 }
 
 // @title    ClearCasbin
@@ -83,7 +85,7 @@ func  GetPolicyPathByAuthorityId(authorityId string) []string {
 // @param     v               int
 // @param     p               string
 // @return                    bool
-func  ClearCasbin(v int, p ...string) bool {
+func ClearCasbin(v int, p ...string) bool {
 	e := Casbin()
 	return e.RemoveFilteredPolicy(v, p...)
 
@@ -123,4 +125,4 @@ func ParamsMatchFunc(args ...interface{}) (interface{}, error) {
 	name2 := args[1].(string)
 
 	return (bool)(ParamsMatch(name1, name2)), nil
-}
+}

+ 7 - 3
web/src/view/superAdmin/authority/components/apis.vue

@@ -9,7 +9,7 @@
       :props="apiDefaultProps"
       default-expand-all
       highlight-current
-      node-key="path"
+      node-key="onlyId"
       ref="apiTree"
       show-checkbox
     ></el-tree>
@@ -44,6 +44,7 @@ export default {
       const apiObj = new Object()
       apis &&
         apis.map(item => {
+        item.onlyId = "p:"+item.path+"m:"+item.method
           if (apiObj.hasOwnProperty(item.apiGroup)) {
             apiObj[item.apiGroup].push(item)
           } else {
@@ -85,13 +86,16 @@ export default {
     // 获取api并整理成树结构
     const res2 = await getAllApis()
     const apis = res2.data.apis
+   
     this.apiTreeData = this.buildApiTree(apis)
-
     const res = await getPolicyPathByAuthorityId({
       authorityId: this.row.authorityId
     })
     this.activeUserId = this.row.authorityId
-    this.apiTreeIds = res.data.paths || []
+    this.apiTreeIds = []
+    res.data.paths&&res.data.paths.map(item=>{
+      this.apiTreeIds.push("p:"+item.path+"m:"+item.method)
+    })
   }
 }
 </script>