github.com/infraboard/keyauth@v0.8.1/apps/role/http/role.go (about) 1 package http 2 3 import ( 4 "fmt" 5 "net/http" 6 7 "github.com/infraboard/mcube/http/context" 8 "github.com/infraboard/mcube/http/request" 9 "github.com/infraboard/mcube/http/response" 10 11 "github.com/infraboard/keyauth/apps/role" 12 "github.com/infraboard/keyauth/apps/token" 13 "github.com/infraboard/keyauth/apps/user/types" 14 ) 15 16 // CreateApplication 创建自定义角色 17 func (h *handler) CreateRole(w http.ResponseWriter, r *http.Request) { 18 ctx := context.GetContext(r) 19 tk := ctx.AuthInfo.(*token.Token) 20 21 req := role.NewCreateRoleRequest() 22 req.CreateBy = tk.Account 23 req.Domain = tk.Domain 24 if err := request.GetDataFromRequest(r, req); err != nil { 25 response.Failed(w, err) 26 return 27 } 28 29 if !tk.UserType.IsIn(types.UserType_SUPPER) && !req.IsCumstomType() { 30 response.Failed(w, fmt.Errorf("only supper account can create global and build role")) 31 return 32 } 33 34 d, err := h.service.CreateRole( 35 r.Context(), 36 req, 37 ) 38 if err != nil { 39 response.Failed(w, err) 40 return 41 } 42 43 response.Success(w, d) 44 } 45 46 func (h *handler) QueryRole(w http.ResponseWriter, r *http.Request) { 47 ctx := context.GetContext(r) 48 tk := ctx.AuthInfo.(*token.Token) 49 50 req := role.NewQueryRoleRequestFromHTTP(r) 51 req.Domain = tk.Domain 52 53 apps, err := h.service.QueryRole( 54 r.Context(), 55 req, 56 ) 57 if err != nil { 58 response.Failed(w, err) 59 return 60 } 61 62 response.Success(w, apps) 63 } 64 65 func (h *handler) DescribeRole(w http.ResponseWriter, r *http.Request) { 66 67 rctx := context.GetContext(r) 68 pid := rctx.PS.ByName("id") 69 qs := r.URL.Query() 70 71 req := role.NewDescribeRoleRequestWithID(pid) 72 req.WithPermissions = qs.Get("with_permissions") == "true" 73 74 ins, err := h.service.DescribeRole( 75 r.Context(), 76 req, 77 ) 78 if err != nil { 79 response.Failed(w, err) 80 return 81 } 82 83 response.Success(w, ins) 84 } 85 86 func (h *handler) DeleteRole(w http.ResponseWriter, r *http.Request) { 87 rctx := context.GetContext(r) 88 req := role.NewDeleteRoleWithID(rctx.PS.ByName("id")) 89 90 _, err := h.service.DeleteRole( 91 r.Context(), 92 req, 93 ) 94 if err != nil { 95 response.Failed(w, err) 96 return 97 } 98 99 response.Success(w, "delete ok") 100 } 101 102 // ListRolePermission 创建自定义角色 103 func (h *handler) ListRolePermission(w http.ResponseWriter, r *http.Request) { 104 req := role.NewQueryPermissionRequestFromHTTP(r) 105 rctx := context.GetContext(r) 106 req.RoleId = rctx.PS.ByName("id") 107 108 d, err := h.service.QueryPermission( 109 r.Context(), 110 req, 111 ) 112 if err != nil { 113 response.Failed(w, err) 114 return 115 } 116 117 response.Success(w, d) 118 } 119 120 // CreateApplication 创建自定义角色 121 func (h *handler) AddPermissionToRole(w http.ResponseWriter, r *http.Request) { 122 ctx := context.GetContext(r) 123 tk := ctx.AuthInfo.(*token.Token) 124 req := role.NewAddPermissionToRoleRequest() 125 req.RoleId = ctx.PS.ByName("id") 126 req.CreateBy = tk.Account 127 128 if err := request.GetDataFromRequest(r, req); err != nil { 129 response.Failed(w, err) 130 return 131 } 132 133 d, err := h.service.AddPermissionToRole( 134 r.Context(), 135 req, 136 ) 137 if err != nil { 138 response.Failed(w, err) 139 return 140 } 141 142 response.Success(w, d) 143 } 144 145 // CreateApplication 创建自定义角色 146 func (h *handler) RemovePermissionFromRole(w http.ResponseWriter, r *http.Request) { 147 rctx := context.GetContext(r) 148 req := role.NewRemovePermissionFromRoleRequest() 149 req.RoleId = rctx.PS.ByName("id") 150 151 if err := request.GetDataFromRequest(r, req); err != nil { 152 response.Failed(w, err) 153 return 154 } 155 156 d, err := h.service.RemovePermissionFromRole( 157 r.Context(), 158 req, 159 ) 160 if err != nil { 161 response.Failed(w, err) 162 return 163 } 164 165 response.Success(w, d) 166 } 167 168 func (h *handler) UpdatePermission(w http.ResponseWriter, r *http.Request) { 169 rctx := context.GetContext(r) 170 171 // 查找出原来的domain 172 req := role.NewUpdatePermissionRequest() 173 if err := request.GetDataFromRequest(r, req); err != nil { 174 response.Failed(w, err) 175 return 176 } 177 req.Id = rctx.PS.ByName("id") 178 179 ins, err := h.service.UpdatePermission( 180 r.Context(), 181 req, 182 ) 183 if err != nil { 184 response.Failed(w, err) 185 return 186 } 187 188 response.Success(w, ins) 189 }