|
|
|
pragma solidity ^0.4.8;
|
|
|
|
|
|
|
|
import "../ownership/rbac/RBAC.sol";
|
|
|
|
|
|
|
|
|
|
|
|
contract RBACMock is RBAC {
|
|
|
|
|
|
|
|
string constant ROLE_ADVISOR = "advisor";
|
|
|
|
|
|
|
|
modifier onlyAdminOrAdvisor()
|
|
|
|
{
|
|
|
|
require(
|
|
|
|
hasRole(msg.sender, ROLE_ADMIN) ||
|
|
|
|
hasRole(msg.sender, ROLE_ADVISOR)
|
|
|
|
);
|
|
|
|
_;
|
|
|
|
}
|
|
|
|
|
|
|
|
function RBACMock(address[] _advisors)
|
|
|
|
public
|
|
|
|
{
|
|
|
|
addRole(msg.sender, ROLE_ADVISOR);
|
|
|
|
|
|
|
|
for (uint256 i = 0; i < _advisors.length; i++) {
|
|
|
|
addRole(_advisors[i], ROLE_ADVISOR);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function onlyAdminsCanDoThis()
|
|
|
|
onlyAdmin
|
|
|
|
view
|
|
|
|
external
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
function onlyAdvisorsCanDoThis()
|
|
|
|
onlyRole(ROLE_ADVISOR)
|
|
|
|
view
|
|
|
|
external
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
function eitherAdminOrAdvisorCanDoThis()
|
|
|
|
onlyAdminOrAdvisor
|
|
|
|
view
|
|
|
|
external
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
function nobodyCanDoThis()
|
|
|
|
onlyRole("unknown")
|
|
|
|
view
|
|
|
|
external
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
// admins can remove advisor's role
|
|
|
|
function removeAdvisor(address _addr)
|
|
|
|
onlyAdmin
|
|
|
|
public
|
|
|
|
{
|
|
|
|
// revert if the user isn't an advisor
|
|
|
|
// (perhaps you want to soft-fail here instead?)
|
|
|
|
checkRole(_addr, ROLE_ADVISOR);
|
|
|
|
|
|
|
|
// remove the advisor's role
|
|
|
|
removeRole(_addr, ROLE_ADVISOR);
|
|
|
|
}
|
|
|
|
}
|