@Id DeleteRoleV2 @Description delete Role. @Tags Role @accept application/x-www-form-urlencoded @Security ApiKeyAuth @Param tenant formData string true "tenant" @Param name formData string true "role name" @Success 200 {object} models.DeleteRoleRespV2 @Router /v2/role/delete [post]
(c echo.Context)
| 147 | // @Success 200 {object} models.DeleteRoleRespV2 |
| 148 | // @Router /v2/role/delete [post] |
| 149 | func DeleteRoleV2(c echo.Context) error { |
| 150 | logger := handler.NewLogger().Named("DeleteRoleV2") |
| 151 | reqParam := new(models.DeleteRoleReqV2) |
| 152 | if err := handler.BindAndValidate(logger, c, reqParam); err != nil { |
| 153 | return c.JSON(http.StatusInternalServerError, models.BuildBaseResp(err)) |
| 154 | } |
| 155 | // cannot delete default supper role |
| 156 | if reqParam.Tenant == common.DefaultAdminTenant && reqParam.Name == common.DefaultRole { |
| 157 | return c.JSON(http.StatusForbidden, models.BuildBaseResp(fmt.Errorf("cannot delete tenant [ %v ] role [ %v ]", reqParam.Tenant, reqParam.Name))) |
| 158 | } |
| 159 | tenant, _ := GetUserName(c) |
| 160 | if !roleAccess(tenant, reqParam.Tenant) { |
| 161 | return c.JSON(http.StatusForbidden, models.BuildBaseResp(fmt.Errorf("cannot delete tenant [ %v ] role [ %v ]", reqParam.Tenant, reqParam.Name))) |
| 162 | } |
| 163 | storeManager, err := common.NewStoreManager([]string{handler.ConsulAddr}, logger) |
| 164 | if err != nil { |
| 165 | return c.JSON(http.StatusInternalServerError, models.BuildBaseResp(fmt.Errorf("get consul client failed: %v", err))) |
| 166 | } |
| 167 | // make sure there is no user in the current role |
| 168 | users, err := storeManager.FindUserList(reqParam.Tenant) |
| 169 | if err != nil { |
| 170 | return c.JSON(http.StatusInternalServerError, |
| 171 | models.BuildBaseResp(fmt.Errorf("find tenant [ %v ] user list from consul failed: %v", reqParam.Tenant, err))) |
| 172 | } |
| 173 | for _, user := range users { |
| 174 | if user.Role == reqParam.Name { |
| 175 | return c.JSON(http.StatusOK, models.BuildBaseResp(fmt.Errorf("there are users in the current tenant [ %v ] role [ %v ]", reqParam.Tenant, reqParam.Name))) |
| 176 | } |
| 177 | } |
| 178 | if err := storeManager.DeleteRole(reqParam.Tenant, reqParam.Name); nil != err { |
| 179 | return c.JSON(http.StatusInternalServerError, |
| 180 | models.BuildBaseResp(fmt.Errorf("delete metadata of Role[RoleName=%v,RoleGroup=%v] from consul failed: %v", reqParam.Name, reqParam.Tenant, err))) |
| 181 | } |
| 182 | |
| 183 | return c.JSON(http.StatusOK, &models.DeleteRoleRespV2{ |
| 184 | BaseResp: models.BuildBaseResp(nil), |
| 185 | }) |
| 186 | } |
| 187 | |
| 188 | // The platform administrator can operate all roles |
| 189 | // the tenant administrator can only operate the roles under the current tenant |
nothing calls this directly
no test coverage detected