Awesome
<h2>DSGuard <small class="text-muted"> <a href="https://github.com/dapphub/ds-guard"><span class="fa fa-github"></span></a> </small> </h2>Permissions whitelist with address-level granularity
Manages an Access Control List which maps source and destination addresses
to function signatures. Intended to be used as an authority
for
ds-auth where it acts as a lookup
table for the canCall
function to provide boolean answers as to whether a
particular address is authorized to call agiven function at another address.
The acl
is a mapping of [src][dst][sig] => boolean
where an address src
can be either permitted or forbidden access to a function sig
at address
dst
according to the boolean value. When used as an authority
by DSAuth the
src
is considered to be the msg.sender
, the dst
is the including contract
and sig
is the function which invoked the auth
modifier.
// Permit a specific address to call a specific function on a specific contract
src = '0011111111111111111111111111111111111111'
dst = '0022222222222222222222222222222222222222'
guard.permit(src, dst, bytes4(sha3('mint(address,uint256)')));
The ANY
constant can be stored in place of src
, dst
or sig
where it will
act as a wildcard and be considered to match any item in that position.
// Permit ANY address to call a specific function on a specific contract
guard.permit(ANY, dst, bytes4(sha3('mint(address,uint256)')));
// Permit ANY address to call a ANY function on a specific contract
guard.permit(ANY, dst, ANY);
Warning: Statements in the access control list are evaluated with the OR operator, meaning that the most open permission will take precedence. If all of the the above 3 examples were in place for example, it is the last that would take precedence, regardless of the more restrictive permissions defined prior. Developers are encouraged to think carefully before using ANY.
Actions
permit
permit an address to call a function at a contract (requires auth)
forbid
forbid an address from calling a function at a contract (requires auth)