@@ -141,31 +141,44 @@ type AuthorizeSessionResponse struct {
141141 Url string `json:"url"`
142142}
143143
144- type AuthorizeRoleRequest struct {
144+ type RoleRequest struct {
145145 User * User `json:"user"`
146146 Role * Role `json:"role"`
147147 Duration * time.Duration `json:"duration,omitempty"` // Optional duration for temporary access
148148}
149149
150150// IsValid checks if any of the fields are nil
151151// if they are then it returns false
152- func (r * AuthorizeRoleRequest ) IsValid () bool {
153- return r .User != nil && r .Role != nil && r . Duration != nil
152+ func (r * RoleRequest ) IsValid () bool {
153+ return r .User != nil && r .Role != nil
154154}
155155
156- func (r * AuthorizeRoleRequest ) GetUser () * User {
156+ func (r * RoleRequest ) GetUser () * User {
157157 return r .User
158158}
159159
160- func (r * AuthorizeRoleRequest ) GetRole () * Role {
160+ func (r * RoleRequest ) GetRole () * Role {
161161 return r .Role
162162}
163163
164- func (r * AuthorizeRoleRequest ) GetDuration () * time.Duration {
164+ func (r * RoleRequest ) GetDuration () * time.Duration {
165165 return r .Duration
166166}
167167
168+ type AuthorizeRoleRequest struct {
169+ * RoleRequest
170+ }
171+
168172type AuthorizeRoleResponse struct {
173+ Metadata map [string ]any `json:"metadata,omitempty"` // Any metadata returned from the provider
174+ }
175+
176+ type RevokeRoleRequest struct {
177+ * RoleRequest
178+ AuthorizeRoleResponse * AuthorizeRoleResponse `json:"response,omitempty"`
179+ }
180+
181+ type RevokeRoleResponse struct {
169182}
170183
171184type ProviderAuthorizor interface {
@@ -197,15 +210,13 @@ type ProviderRoleBasedAccessControl interface {
197210 ctx context.Context ,
198211 req * AuthorizeRoleRequest ,
199212 ) (
200- map [ string ] any , // Return any custom metadata the provider wants to store
213+ * AuthorizeRoleResponse , // Return any custom metadata the provider wants to store
201214 error ,
202215 )
203216 RevokeRole (
204217 ctx context.Context ,
205- user * User ,
206- role * Role ,
207- metadata map [string ]any , // Any metadata returned from AuthorizeRole
208- ) (map [string ]any , error )
218+ req * RevokeRoleRequest , // Any metadata returned from AuthorizeRole
219+ ) (* RevokeRoleResponse , error )
209220}
210221
211222type BaseProvider struct {
@@ -340,12 +351,15 @@ func (p *BaseProvider) ListResources(ctx context.Context, filters ...string) ([]
340351func (p * BaseProvider ) AuthorizeRole (
341352 ctx context.Context ,
342353 req * AuthorizeRoleRequest ,
343- ) (map [ string ] any , error ) {
354+ ) (* AuthorizeRoleResponse , error ) {
344355 // Default implementation does nothing
345356 return nil , fmt .Errorf ("the provider '%s' does not implement AuthorizeRole" , p .GetProvider ())
346357}
347358
348- func (p * BaseProvider ) RevokeRole (ctx context.Context , user * User , role * Role , metadata map [string ]any ) (map [string ]any , error ) {
359+ func (p * BaseProvider ) RevokeRole (
360+ ctx context.Context ,
361+ req * RevokeRoleRequest ,
362+ ) (* RevokeRoleResponse , error ) {
349363 // Default implementation does nothing
350364 return nil , fmt .Errorf ("the provider '%s' does not implement RevokeRole" , p .GetProvider ())
351365}
0 commit comments