Metadata Authz
The authz implementation in the metadata module checks for granted permission in cases when there are missing signatures.
A GenericAuthorization should be used using the message type URLs now documented in 03_messages.md.
Code
Grant:
granter := ... // Bech32 AccAddress
grantee := ... // Bech32 AccAddress
a := authz.NewGenericAuthorization(types.TypeURLMsgWriteScopeRequest)
err := s.app.AuthzKeeper.SaveGrant(s.ctx, grantee, granter, a, now.Add(time.Hour))
Delete:
err := s.app.AuthzKeeper.DeleteGrant(s.ctx, grantee, granter, types.TypeURLMsgWriteScopeRequest)
Revoke:
granter := ... // Bech32 AccAddress
grantee := ... // Bech32 AccAddress
msgRevoke := authz.NewMsgRevoke(granter, grantee, types.TypeURLMsgWriteScopeRequest)
res, err := s.app.AuthzKeeper.Revoke(s.ctx, msgRevoke)
CLI
Grant:
$ provenanced tx authz grant <grantee> <authorization_type> --from <granter>
Revoke:
$ provenanced tx authz revoke <grantee> <msg-type-url> --from <granter>
See GenericAuthorization specification for more details.
Special allowances
Some messages in the metadata module have hierarchies. A grant on a parent message type will also work for any of
its message subtypes, but not the other way around. Therefore, authorizations on these messages are one way.
-
An authorization on
MsgWriteScopeRequestworks for any of the listed message subtypes:MsgAddScopeDataAccessRequestMsgAddScopeDataAccessRequestMsgDeleteScopeDataAccessRequestMsgAddScopeOwnerRequestMsgDeleteScopeOwnerRequest
-
An authorization on
MsgWriteSessionRequestworks for any of the listed message subtypes:MsgWriteRecordRequest
-
An authorization on
MsgWriteScopeSpecificationRequestworks for any of the listed message subtypes:MsgAddContractSpecToScopeSpecRequestMsgDeleteContractSpecFromScopeSpecRequest
-
An authorization on
MsgWriteContractSpecificationRequestworks for any of the listed message subtypes:MsgWriteRecordSpecificationRequest
-
An authorization on
MsgDeleteContractSpecificationRequestworks for any of the listed message subtypes:MsgDeleteRecordSpecificationRequest
Notes:
An authorization on a Write endpoint for an entry/spec will NOT work for its Delete endpoint.