diff --git a/README-zh_CN.md b/README-zh_CN.md index 21996496e3f3ef8090851da75627253d79d9a357..9de0e7ce3429112bb0ee5e5ea50bcab178941039 100644 --- a/README-zh_CN.md +++ b/README-zh_CN.md @@ -210,7 +210,7 @@ go run main.go; - 配置管理:配置文件可前台修改(测试环境不开放此功能)。 - 富文本编辑器:MarkDown编辑器功能嵌入。 - 条件搜索:增加条件搜索示例。 -- restful示例:参考客户管理功能,customer组api。 +- restful示例:可以参考用户管理模块中的示例API。 ``` 前端文件参考: src\view\superAdmin\api\api.vue 后台文件参考: model\dnModel\api.go diff --git a/README.md b/README.md index f676652ad7ee0a7b5b67ba2c77668c8c0288d0ad..7f646b968489a292060041d427d67f1ee89ab4cf 100644 --- a/README.md +++ b/README.md @@ -207,7 +207,7 @@ go run main.go; - Configuration management: The configuration file can be modified in the web page (the test environment does not provide this function). - Rich text editor: Embed MarkDown editor function. - Conditional search: Add an example of conditional search. -- Restful example: refer to customer management function and apidcustomer group. +- Restful example: You can see sample APIs in user management module. ``` fontend code file: src\view\superAdmin\api\api.vue diff --git a/server/api/v1/sys_authority.go b/server/api/v1/sys_authority.go index 690d3a7d04a7d1a3c9cb308de49b02ddff2eae2b..48a845ad364f362b99403826197ac2ff67bf36f1 100644 --- a/server/api/v1/sys_authority.go +++ b/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 { diff --git a/server/model/response/sys_casbin.go b/server/model/response/sys_casbin.go index 3f41c16477914ee1f3b40410af33e15a114f73fa..a1be69ab299a9a74f140977a83a0e9fa75953047 100644 --- a/server/model/response/sys_casbin.go +++ b/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"` } diff --git a/server/service/sys_authority.go b/server/service/sys_authority.go index 6f8dab4b65b8f2bf61bf8de83f028207e1b562ef..39788fea8c9599c6f47ddd58e5169016224e7479 100644 --- a/server/service/sys_authority.go +++ b/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("此角色有用户正在使用禁止删除") diff --git a/server/service/sys_casbin.go b/server/service/sys_casbin.go index b9e8f52825a75e0ced9bd1e02293c0a1bf397422..29b1e26fb6b7dcec7dc7d0891a31b055b93de9f3 100644 --- a/server/service/sys_casbin.go +++ b/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 -} \ No newline at end of file +} diff --git a/web/src/view/superAdmin/authority/components/apis.vue b/web/src/view/superAdmin/authority/components/apis.vue index 7b62e953d40214a208a5daaeb7368a9895789e9e..bb56046d70da3d3bf91366f319a4381a1a2cc95e 100644 --- a/web/src/view/superAdmin/authority/components/apis.vue +++ b/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 > @@ -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) + }) } }