MCPcopy Create free account
hub / github.com/actiontech/dtle / DeleteRoleV2

Function DeleteRoleV2

api/handler/v2/role.go:149–186  ·  view source on GitHub ↗

@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)

Source from the content-addressed store, hash-verified

147// @Success 200 {object} models.DeleteRoleRespV2
148// @Router /v2/role/delete [post]
149func 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

Callers

nothing calls this directly

Calls 8

FindUserListMethod · 0.95
DeleteRoleMethod · 0.95
NewLoggerFunction · 0.92
BindAndValidateFunction · 0.92
BuildBaseRespFunction · 0.92
NewStoreManagerFunction · 0.92
GetUserNameFunction · 0.85
roleAccessFunction · 0.85

Tested by

no test coverage detected