RBACMock.sol 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. pragma solidity ^0.4.8;
  2. import '../../contracts/ownership/rbac/RBAC.sol';
  3. contract RBACMock is RBAC {
  4. modifier onlyOwnerOrAdvisor()
  5. {
  6. require(
  7. hasRole(msg.sender, "owner") ||
  8. hasRole(msg.sender, "advisor")
  9. );
  10. _;
  11. }
  12. function RBACMock(address[] _advisors)
  13. public
  14. {
  15. addRole(msg.sender, "owner");
  16. addRole(msg.sender, "advisor");
  17. for (uint256 i = 0; i < _advisors.length; i++) {
  18. addRole(_advisors[i], "advisor");
  19. }
  20. }
  21. function onlyOwnersCanDoThis()
  22. onlyRole("owner")
  23. view
  24. external
  25. {
  26. }
  27. function onlyAdvisorsCanDoThis()
  28. onlyRole("advisor")
  29. view
  30. external
  31. {
  32. }
  33. function eitherOwnerOrAdvisorCanDoThis()
  34. onlyOwnerOrAdvisor
  35. view
  36. external
  37. {
  38. }
  39. function nobodyCanDoThis()
  40. onlyRole("unknown")
  41. view
  42. external
  43. {
  44. }
  45. // owners can remove advisor's role
  46. function removeAdvisor(address _addr)
  47. onlyRole("owner")
  48. public
  49. {
  50. // revert if the user isn't an advisor
  51. // (perhaps you want to soft-fail here instead?)
  52. checkRole(_addr, "advisor");
  53. // remove the advisor's role
  54. removeRole(_addr, "advisor");
  55. }
  56. }