RBACExample.sol 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. pragma solidity ^0.4.8;
  2. import '../ownership/rbac/RBAC.sol';
  3. contract RBACExample is RBAC {
  4. modifier onlyOwnerOrAdvisor()
  5. {
  6. require(
  7. hasRole(msg.sender, "owner") ||
  8. hasRole(msg.sender, "advisor")
  9. );
  10. _;
  11. }
  12. function RBACExample(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. // owners can remove advisor's role
  40. function removeAdvisor(address _addr)
  41. onlyRole("owner")
  42. public
  43. {
  44. // revert if the user isn't an advisor
  45. // (perhaps you want to soft-fail here instead?)
  46. checkRole(_addr, "advisor");
  47. // remove the advisor's role
  48. removeRole(_addr, "advisor");
  49. }
  50. }