authz 0.0.1.alpha5 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (405) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -4
  3. data/app/assets/javascripts/authz/3_authz_flash.js +18 -0
  4. data/app/assets/javascripts/authz/pending_controller_actions.js +2 -0
  5. data/app/assets/stylesheets/authz/multiselect.scss.erb +1 -0
  6. data/app/assets/stylesheets/authz/workspace.sass +17 -0
  7. data/app/controllers/authz/bulk/controller_actions_controller.rb +45 -0
  8. data/app/controllers/authz/business_processes_controller.rb +6 -0
  9. data/app/controllers/authz/controller_actions_controller.rb +6 -0
  10. data/app/controllers/authz/home_controller.rb +2 -7
  11. data/app/controllers/authz/pending_controller_actions_controller.rb +10 -0
  12. data/app/controllers/authz/rolables_controller.rb +2 -0
  13. data/app/controllers/authz/roles_controller.rb +6 -0
  14. data/app/controllers/authz/scoping_rules_controller.rb +4 -0
  15. data/app/controllers/authz/stale_controller_actions_controller.rb +9 -0
  16. data/app/helpers/authz/application_helper.rb +12 -12
  17. data/app/models/authz/controller_action.rb +29 -0
  18. data/app/views/authz/home/index.html.slim +60 -30
  19. data/app/views/authz/pending_controller_actions/index.html.slim +26 -0
  20. data/app/views/authz/stale_controller_actions/index.html.slim +25 -0
  21. data/app/views/layouts/authz/_menu.html.slim +7 -7
  22. data/app/views/layouts/authz/application.html.slim +5 -1
  23. data/config/routes.rb +7 -0
  24. data/lib/authz/version.rb +1 -1
  25. data/spec/controllers/authz/bulk/controller_actions_controller_spec.rb +10 -0
  26. data/spec/controllers/authz/pending_controller_actions_spec.rb +7 -0
  27. data/spec/controllers/authz/stale_controller_actions_spec.rb +7 -0
  28. data/spec/dummy/app/controllers/application_controller.rb +1 -1
  29. data/spec/dummy/app/scopables/scopable_by_city.rb +1 -1
  30. data/spec/dummy/config/routes.rb +1 -1
  31. data/spec/dummy/db/development.sqlite3 +0 -0
  32. data/spec/dummy/db/spec.sqlite3 +0 -0
  33. data/spec/dummy/log/development.log +830 -0
  34. data/spec/dummy/log/test.log +12974 -0
  35. data/spec/dummy/tmp/cache/000/4E1/authz%2Froles%2F1-20190127110853030386%2FScopableByCity +0 -0
  36. data/spec/dummy/tmp/cache/001/721/authz%2Froles%2F1-20190127110853172218%2FScopableByCity +0 -0
  37. data/spec/dummy/tmp/cache/001/791/authz%2Froles%2F1-20190127110853324642%2FScopableByCity +0 -0
  38. data/spec/dummy/tmp/cache/002/761/authz%2Froles%2F1-20190127110853005557%2FScopableByCity +0 -0
  39. data/spec/dummy/tmp/cache/002/891/authz%2Froles%2F1-20190127110834553037%2FScopableByCity +0 -0
  40. data/spec/dummy/tmp/cache/002/8B1/authz%2Froles%2F1-20190127110853236353%2FScopableByCity +0 -0
  41. data/spec/dummy/tmp/cache/002/8C1/authz%2Froles%2F1-20190127110854232662%2FScopableByCity +0 -0
  42. data/spec/dummy/tmp/cache/002/911/authz%2Froles%2F1-20190127110834721832%2FScopableByCity +0 -0
  43. data/spec/dummy/tmp/cache/002/911/authz%2Froles%2F1-20190127110853272371%2FScopableByCity +0 -0
  44. data/spec/dummy/tmp/cache/002/9C1/authz%2Froles%2F2-20190127110853420753%2FScopableByCity +0 -0
  45. data/spec/dummy/tmp/cache/003/A21/authz%2Froles%2F1-20190127110853417353%2FScopableByCity +0 -0
  46. data/spec/dummy/tmp/cache/003/B21/authz%2Froles%2F1-20190127110834577221%2FScopableByCity +0 -0
  47. data/spec/dummy/tmp/cache/003/B81/authz%2Froles%2F2-20190127110853373216%2FScopableByCity +0 -0
  48. data/spec/dummy/tmp/cache/005/C31/authz%2Froles%2F1-20190127110854215745%2FScopableByCity +0 -0
  49. data/spec/dummy/tmp/cache/005/CF1/authz%2Froles%2F1-20190127110834642851%2FScopableByCity +0 -0
  50. data/spec/dummy/tmp/cache/005/FA1/authz%2Froles%2F1-20190128040837834032%2FScopableByCity +0 -0
  51. data/spec/dummy/tmp/cache/006/011/authz%2Froles%2F1-20190128040837800805%2FScopableByCity +0 -0
  52. data/spec/dummy/tmp/cache/006/E81/authz%2Froles%2F1-20190127110835826244%2FScopableByCity +0 -0
  53. data/spec/dummy/tmp/cache/007/101/authz%2Froles%2F1-20190128040836630815%2FScopableByCity +0 -0
  54. data/spec/dummy/tmp/cache/007/EE1/authz%2Froles%2F1-20190127110853097038%2FScopableByCity +0 -0
  55. data/spec/dummy/tmp/cache/007/F31/authz%2Froles%2F1-20190127110835830637%2FScopableByCity +0 -0
  56. data/spec/dummy/tmp/cache/008/0B1/authz%2Froles%2F1-20190127110834824834%2FScopableByCity +0 -0
  57. data/spec/dummy/tmp/cache/008/0D1/authz%2Froles%2F1-20190127110835818317%2FScopableByCity +0 -0
  58. data/spec/dummy/tmp/cache/008/101/authz%2Froles%2F1-20190127110834973109%2FScopableByCity +0 -0
  59. data/spec/dummy/tmp/cache/008/341/authz%2Froles%2F2-20190127110834976321%2FScopableByCity +0 -0
  60. data/spec/dummy/tmp/cache/009/151/authz%2Froles%2F1-20190127110854226936%2FScopableByCity +0 -0
  61. data/spec/dummy/tmp/cache/009/191/authz%2Froles%2F1-20190127110835814295%2FScopableByCity +0 -0
  62. data/spec/dummy/tmp/cache/009/3E1/authz%2Froles%2F1-20190128040836740662%2FScopableByCity +0 -0
  63. data/spec/dummy/tmp/cache/00A/2E1/authz%2Froles%2F1-20190127110834926077%2FScopableByCity +0 -0
  64. data/spec/dummy/tmp/cache/00B/411/authz%2Froles%2F1-20190127110834619745%2FScopableByCity +0 -0
  65. data/spec/dummy/tmp/cache/00B/4E1/authz%2Froles%2F1-20190127110853369823%2FScopableByCity +0 -0
  66. data/spec/dummy/tmp/cache/00B/631/authz%2Froles%2F1-20190128040837813194%2FScopableByCity +0 -0
  67. data/spec/dummy/tmp/cache/00C/641/authz%2Froles%2F1-20190127110854197923%2FScopableByCity +0 -0
  68. data/spec/dummy/tmp/cache/00C/6E1/authz%2Froles%2F1-20190128040836517294%2FScopableByCity +0 -0
  69. data/spec/dummy/tmp/cache/00C/701/authz%2Froles%2F2-20190127110834884039%2FScopableByCity +0 -0
  70. data/spec/dummy/tmp/cache/00C/841/authz%2Froles%2F1-20190128040836673903%2FScopableByCity +0 -0
  71. data/spec/dummy/tmp/cache/00D/601/authz%2Froles%2F1-20190127110854218867%2FScopableByCity +0 -0
  72. data/spec/dummy/tmp/cache/00D/681/authz%2Froles%2F1-20190127110835805857%2FScopableByCity +0 -0
  73. data/spec/dummy/tmp/cache/00D/6D1/authz%2Froles%2F1-20190127110834880639%2FScopableByCity +0 -0
  74. data/spec/dummy/tmp/cache/00D/711/authz%2Froles%2F1-20190127110835838095%2FScopableByCity +0 -0
  75. data/spec/dummy/tmp/cache/00D/851/authz%2Froles%2F1-20190128040836801974%2FScopableByCity +0 -0
  76. data/spec/dummy/tmp/cache/00D/8E1/authz%2Froles%2F1-20190128040836478055%2FScopableByCity +0 -0
  77. data/spec/dummy/tmp/cache/00D/971/authz%2Froles%2F1-20190128040836397703%2FScopableByCity +0 -0
  78. data/spec/dummy/tmp/cache/00D/A61/authz%2Froles%2F2-20190128040836744490%2FScopableByCity +0 -0
  79. data/spec/dummy/tmp/cache/00E/9A1/authz%2Froles%2F1-20190128040836446493%2FScopableByCity +0 -0
  80. data/spec/dummy/tmp/cache/00E/A41/authz%2Froles%2F1-20190128040837809327%2FScopableByCity +0 -0
  81. data/spec/dummy/tmp/cache/00F/AD1/authz%2Froles%2F2-20190127110834929384%2FScopableByCity +0 -0
  82. data/spec/dummy/tmp/cache/011/D21/authz%2Froles%2F1-20190128040837821489%2FScopableByCity +0 -0
  83. data/spec/dummy/tmp/cache/012/D21/authz%2Froles%2F2-20190127110853327898%2FScopableByCity +0 -0
  84. data/spec/dummy/tmp/cache/012/ED1/authz%2Froles%2F1-20190128040836557809%2FScopableByCity +0 -0
  85. data/spec/dummy/tmp/cache/012/F71/authz%2Froles%2F1-20190128040837824982%2FScopableByCity +0 -0
  86. data/spec/dummy/tmp/cache/013/EB1/authz%2Froles%2F1-20190127110834786928%2FScopableByCity +0 -0
  87. data/spec/dummy/tmp/cache/014/0F1/authz%2Froles%2F1-20190128040836369468%2FScopableByCity +0 -0
  88. data/spec/dummy/tmp/cache/014/291/authz%2Froles%2F1-20190128040837839771%2FScopableByCity +0 -0
  89. data/spec/dummy/tmp/cache/014/3C1/authz%2Froles%2F2-20190128040836879254%2FScopableByCity +0 -0
  90. data/spec/dummy/tmp/cache/015/081/authz%2Froles%2F1-20190127110835845699%2FScopableByCity +0 -0
  91. data/spec/dummy/tmp/cache/015/361/authz%2Froles%2F2-20190128040836807597%2FScopableByCity +0 -0
  92. data/spec/dummy/tmp/cache/015/371/authz%2Froles%2F1-20190128040836874783%2FScopableByCity +0 -0
  93. data/spec/dummy/tmp/cache/017/2E1/authz%2Froles%2F1-20190127110834677699%2FScopableByCity +0 -0
  94. data/spec/dummy/tmp/cache/093/9A1/authz%2Froles%2F1-20190128040837665131%2Fratings%2Fcreate +0 -0
  95. data/spec/dummy/tmp/cache/09C/521/authz%2Froles%2F1-20190128040837670846%2Fratings%2Fcreate +0 -0
  96. data/spec/dummy/tmp/cache/0B9/E81/authz%2Froles%2F1-20190127110854101780%2Fvisitors%2Findex +0 -0
  97. data/spec/dummy/tmp/cache/0BC/2B1/authz%2Froles%2F1-20190127110854107192%2Fvisitors%2Findex +0 -0
  98. data/spec/dummy/tmp/cache/139/571/authz%2Froles%2F1-20190127110835508232%2Freports%2Fdestroy +0 -0
  99. data/spec/dummy/tmp/cache/13A/671/authz%2Froles%2F1-20190127110835511590%2Freports%2Fdestroy +0 -0
  100. data/spec/dummy/tmp/cache/14E/971/authz%2Froles%2F1-20190128040837518033%2Fclearances%2Findex +0 -0
  101. data/spec/dummy/tmp/cache/151/DC1/authz%2Froles%2F1-20190128040837514580%2Fclearances%2Findex +0 -0
  102. data/spec/dummy/tmp/cache/154/351/authz%2Froles%2F1-20190128040837693233%2Fclearances%2Findex +0 -0
  103. data/spec/dummy/tmp/cache/163/8E1/authz%2Froles%2F1-20190128040837686498%2Fclearances%2Findex +0 -0
  104. data/spec/dummy/tmp/cache/1A3/AE1/authz%2Froles%2F1-20190128040837602000%2Fauthz%2Fhome%2Findex +0 -0
  105. data/spec/dummy/tmp/cache/1A8/F61/authz%2Froles%2F1-20190127110854005246%2Fauthz%2Fhome%2Findex +0 -0
  106. data/spec/dummy/tmp/cache/1A9/2C1/authz%2Froles%2F1-20190128040837732610%2Fclearances%2Fcreate +0 -0
  107. data/spec/dummy/tmp/cache/1AD/BC1/authz%2Froles%2F1-20190128040837770031%2Fauthz%2Fhome%2Findex +0 -0
  108. data/spec/dummy/tmp/cache/1B1/DF1/authz%2Froles%2F1-20190127110854008486%2Fauthz%2Fhome%2Findex +0 -0
  109. data/spec/dummy/tmp/cache/1B5/431/authz%2Froles%2F1-20190128040837735079%2Fclearances%2Fcreate +0 -0
  110. data/spec/dummy/tmp/cache/1B5/8E1/authz%2Froles%2F1-20190128040837774413%2Fauthz%2Fhome%2Findex +0 -0
  111. data/spec/dummy/tmp/cache/1BC/3A1/authz%2Froles%2F1-20190128040837596256%2Fauthz%2Fhome%2Findex +0 -0
  112. data/spec/dummy/tmp/cache/1BC/D81/authz%2Froles%2F1-20190127110853985015%2Fclearances%2Fupdate +0 -0
  113. data/spec/dummy/tmp/cache/1BF/251/authz%2Froles%2F1-20190127110853990841%2Fclearances%2Fupdate +0 -0
  114. data/spec/dummy/tmp/cache/1DC/DF1/authz%2Froles%2F1-20190127110853131132%2FScopableByClearance +0 -0
  115. data/spec/dummy/tmp/cache/1E1/781/authz%2Froles%2F1-20190127110834133652%2Fcontroller%2Faction +0 -0
  116. data/spec/dummy/tmp/cache/1E1/7E1/authz%2Froles%2F1-20190127110834151931%2Fcontroller%2Faction +0 -0
  117. data/spec/dummy/tmp/cache/1E3/921/authz%2Froles%2F1-20190127110853073062%2FScopableByClearance +0 -0
  118. data/spec/dummy/tmp/cache/1E5/AF1/authz%2Froles%2F1-20190127110853030386%2FScopableByClearance +0 -0
  119. data/spec/dummy/tmp/cache/1E6/0A1/authz%2Froles%2F2-20190127110852605148%2Fcontroller%2Faction +0 -0
  120. data/spec/dummy/tmp/cache/1E6/D81/authz%2Froles%2F1-20190127110853172218%2FScopableByClearance +0 -0
  121. data/spec/dummy/tmp/cache/1E6/DF1/authz%2Froles%2F1-20190127110853324642%2FScopableByClearance +0 -0
  122. data/spec/dummy/tmp/cache/1E7/071/authz%2Froles%2F2-20190127110853420753%2FScopableByClearance +0 -0
  123. data/spec/dummy/tmp/cache/1E7/131/authz%2Froles%2F1-20190127110852620684%2Fcontroller%2Faction +0 -0
  124. data/spec/dummy/tmp/cache/1E7/291/authz%2Froles%2F2-20190127110852622393%2Fcontroller%2Faction +0 -0
  125. data/spec/dummy/tmp/cache/1E7/E11/authz%2Froles%2F1-20190127110853005557%2FScopableByClearance +0 -0
  126. data/spec/dummy/tmp/cache/1E7/F41/authz%2Froles%2F1-20190127110834553037%2FScopableByClearance +0 -0
  127. data/spec/dummy/tmp/cache/1E7/F61/authz%2Froles%2F1-20190127110853236353%2FScopableByClearance +0 -0
  128. data/spec/dummy/tmp/cache/1E7/FC1/authz%2Froles%2F1-20190127110834721832%2FScopableByClearance +0 -0
  129. data/spec/dummy/tmp/cache/1E7/FC1/authz%2Froles%2F1-20190127110853272371%2FScopableByClearance +0 -0
  130. data/spec/dummy/tmp/cache/1E8/121/authz%2Froles%2F1-20190127110853417353%2FScopableByClearance +0 -0
  131. data/spec/dummy/tmp/cache/1E8/221/authz%2Froles%2F1-20190127110834577221%2FScopableByClearance +0 -0
  132. data/spec/dummy/tmp/cache/1E8/281/authz%2Froles%2F1-20190127110852603495%2Fcontroller%2Faction +0 -0
  133. data/spec/dummy/tmp/cache/1E8/281/authz%2Froles%2F2-20190127110853373216%2FScopableByClearance +0 -0
  134. data/spec/dummy/tmp/cache/1E9/451/authz%2Froles%2F2-20190127110834135279%2Fcontroller%2Faction +0 -0
  135. data/spec/dummy/tmp/cache/1EA/491/authz%2Froles%2F1-20190127110834642851%2FScopableByClearance +0 -0
  136. data/spec/dummy/tmp/cache/1EC/721/authz%2Froles%2F1-20190127110853097038%2FScopableByClearance +0 -0
  137. data/spec/dummy/tmp/cache/1EC/941/authz%2Froles%2F1-20190128040836630815%2FScopableByClearance +0 -0
  138. data/spec/dummy/tmp/cache/1ED/941/authz%2Froles%2F1-20190127110834824834%2FScopableByClearance +0 -0
  139. data/spec/dummy/tmp/cache/1ED/991/authz%2Froles%2F1-20190127110834973109%2FScopableByClearance +0 -0
  140. data/spec/dummy/tmp/cache/1ED/BD1/authz%2Froles%2F2-20190127110834976321%2FScopableByClearance +0 -0
  141. data/spec/dummy/tmp/cache/1ED/E01/authz%2Froles%2F1-20190128040835854902%2Fcontroller%2Faction +0 -0
  142. data/spec/dummy/tmp/cache/1EE/C41/authz%2Froles%2F2-20190127110834153698%2Fcontroller%2Faction +0 -0
  143. data/spec/dummy/tmp/cache/1EE/CC1/authz%2Froles%2F1-20190128040836740662%2FScopableByClearance +0 -0
  144. data/spec/dummy/tmp/cache/1EF/C11/authz%2Froles%2F1-20190127110834926077%2FScopableByClearance +0 -0
  145. data/spec/dummy/tmp/cache/1F0/D91/authz%2Froles%2F1-20190127110834619745%2FScopableByClearance +0 -0
  146. data/spec/dummy/tmp/cache/1F0/E61/authz%2Froles%2F1-20190127110853369823%2FScopableByClearance +0 -0
  147. data/spec/dummy/tmp/cache/1F1/0B1/authz%2Froles%2F1-20190128040836517294%2FScopableByClearance +0 -0
  148. data/spec/dummy/tmp/cache/1F1/0D1/authz%2Froles%2F2-20190127110834884039%2FScopableByClearance +0 -0
  149. data/spec/dummy/tmp/cache/1F1/211/authz%2Froles%2F1-20190128040836673903%2FScopableByClearance +0 -0
  150. data/spec/dummy/tmp/cache/1F1/471/authz%2Froles%2F2-20190128040835834565%2Fcontroller%2Faction +0 -0
  151. data/spec/dummy/tmp/cache/1F2/0F1/authz%2Froles%2F1-20190127110834880639%2FScopableByClearance +0 -0
  152. data/spec/dummy/tmp/cache/1F2/271/authz%2Froles%2F1-20190128040836801974%2FScopableByClearance +0 -0
  153. data/spec/dummy/tmp/cache/1F2/301/authz%2Froles%2F1-20190128040836478055%2FScopableByClearance +0 -0
  154. data/spec/dummy/tmp/cache/1F2/391/authz%2Froles%2F1-20190128040836397703%2FScopableByClearance +0 -0
  155. data/spec/dummy/tmp/cache/1F2/481/authz%2Froles%2F2-20190128040836744490%2FScopableByClearance +0 -0
  156. data/spec/dummy/tmp/cache/1F3/411/authz%2Froles%2F1-20190128040836446493%2FScopableByClearance +0 -0
  157. data/spec/dummy/tmp/cache/1F4/591/authz%2Froles%2F2-20190127110834929384%2FScopableByClearance +0 -0
  158. data/spec/dummy/tmp/cache/1F4/771/authz%2Froles%2F1-20190128040835832949%2Fcontroller%2Faction +0 -0
  159. data/spec/dummy/tmp/cache/1F7/8D1/authz%2Froles%2F2-20190127110853327898%2FScopableByClearance +0 -0
  160. data/spec/dummy/tmp/cache/1F7/A81/authz%2Froles%2F1-20190128040836557809%2FScopableByClearance +0 -0
  161. data/spec/dummy/tmp/cache/1F8/AB1/authz%2Froles%2F1-20190127110834786928%2FScopableByClearance +0 -0
  162. data/spec/dummy/tmp/cache/1F8/FD1/authz%2Froles%2F2-20190128040835857684%2Fcontroller%2Faction +0 -0
  163. data/spec/dummy/tmp/cache/1F9/011/authz%2Froles%2F2-20190128040836879254%2FScopableByClearance +0 -0
  164. data/spec/dummy/tmp/cache/1F9/D41/authz%2Froles%2F1-20190128040836369468%2FScopableByClearance +0 -0
  165. data/spec/dummy/tmp/cache/1FA/001/authz%2Froles%2F2-20190128040836807597%2FScopableByClearance +0 -0
  166. data/spec/dummy/tmp/cache/1FA/011/authz%2Froles%2F1-20190128040836874783%2FScopableByClearance +0 -0
  167. data/spec/dummy/tmp/cache/1FC/021/authz%2Froles%2F1-20190127110834677699%2FScopableByClearance +0 -0
  168. data/spec/dummy/tmp/cache/2E6/BA0/9%2F1548587333 +0 -0
  169. data/spec/dummy/tmp/cache/2F7/BD1/authz%2Froles%2F1-20190127110854120504%2Fauthz%2Frolables%2Fshow +0 -0
  170. data/spec/dummy/tmp/cache/2FC/511/authz%2Froles%2F1-20190127110854125324%2Fauthz%2Frolables%2Fshow +0 -0
  171. data/spec/dummy/tmp/cache/308/801/authz%2Froles%2F1-20190128040837617425%2Fdevise%2Fsessions%2Fnew +0 -0
  172. data/spec/dummy/tmp/cache/309/A21/authz%2Froles%2F1-20190128040837625913%2Fdevise%2Fsessions%2Fnew +0 -0
  173. data/spec/dummy/tmp/cache/314/7B0/17%2F1548587314 +0 -0
  174. data/spec/dummy/tmp/cache/316/790/17%2F1548648516 +0 -0
  175. data/spec/dummy/tmp/cache/319/C80/85%2F1548587314 +0 -0
  176. data/spec/dummy/tmp/cache/31B/C30/58%2F1548648516 +0 -0
  177. data/spec/dummy/tmp/cache/31B/DE1/authz%2Froles%2F1-20190127110835658301%2Fauthz%2Froles%2Fdestroy +0 -0
  178. data/spec/dummy/tmp/cache/31C/E50/69%2F1548587333 +0 -0
  179. data/spec/dummy/tmp/cache/320/591/authz%2Froles%2F1-20190127110835650665%2Fauthz%2Froles%2Fdestroy +0 -0
  180. data/spec/dummy/tmp/cache/359/361/authz%2Froles%2F1-20190127110853971061%2Fauthz%2Frolables%2Findex +0 -0
  181. data/spec/dummy/tmp/cache/35B/791/authz%2Froles%2F1-20190127110853966140%2Fauthz%2Frolables%2Findex +0 -0
  182. data/spec/dummy/tmp/cache/373/351/authz%2Froles%2F1-20190128040837562323%2Fdevise%2Fpasswords%2Fnew +0 -0
  183. data/spec/dummy/tmp/cache/381/CD1/authz%2Froles%2F1-20190128040837554867%2Fdevise%2Fpasswords%2Fnew +0 -0
  184. data/spec/dummy/tmp/cache/3A9/F71/authz%2Froles%2F1-20190127110835714531%2Fannouncements%2Fdestroy +0 -0
  185. data/spec/dummy/tmp/cache/3AE/861/authz%2Froles%2F1-20190127110835709343%2Fannouncements%2Fdestroy +0 -0
  186. data/spec/dummy/tmp/cache/3B8/A21/authz%2Froles%2F1-20190127110854021611%2Fauthz%2Frolables%2Fupdate +0 -0
  187. data/spec/dummy/tmp/cache/3B9/E41/authz%2Froles%2F1-20190128040837578219%2Fannouncements%2Fdestroy +0 -0
  188. data/spec/dummy/tmp/cache/3BB/181/authz%2Froles%2F1-20190128040837581686%2Fannouncements%2Fdestroy +0 -0
  189. data/spec/dummy/tmp/cache/3BD/3A1/authz%2Froles%2F1-20190127110854027025%2Fauthz%2Frolables%2Fupdate +0 -0
  190. data/spec/dummy/tmp/cache/3C8/B81/authz%2Froles%2F1-20190128040837534344%2Fauthz%2Frolables%2Fupdate +0 -0
  191. data/spec/dummy/tmp/cache/3CB/061/authz%2Froles%2F1-20190128040837540098%2Fauthz%2Frolables%2Fupdate +0 -0
  192. data/spec/dummy/tmp/cache/498/D41/authz%2Froles%2F1-20190127110854040367%2Fdevise%2Fpasswords%2Fcreate +0 -0
  193. data/spec/dummy/tmp/cache/4A1/041/authz%2Froles%2F1-20190127110854047486%2Fdevise%2Fpasswords%2Fcreate +0 -0
  194. data/spec/dummy/tmp/cache/50D/461/authz%2Froles%2F1-20190127110835615063%2Fauthz%2Fscoping_rules%2Fedit +0 -0
  195. data/spec/dummy/tmp/cache/510/B01/authz%2Froles%2F1-20190127110835618234%2Fauthz%2Fscoping_rules%2Fedit +0 -0
  196. data/spec/dummy/tmp/cache/5BB/A31/authz%2Froles%2F1-20190127110835544610%2Factive_storage%2Fdisk%2Fupdate +0 -0
  197. data/spec/dummy/tmp/cache/5C2/AB1/authz%2Froles%2F1-20190127110835783720%2Factive_storage%2Fdisk%2Fupdate +0 -0
  198. data/spec/dummy/tmp/cache/5C3/BB1/authz%2Froles%2F1-20190127110835761365%2Factive_storage%2Fdisk%2Fupdate +0 -0
  199. data/spec/dummy/tmp/cache/5CA/B41/authz%2Froles%2F1-20190127110835765197%2Factive_storage%2Fdisk%2Fupdate +0 -0
  200. data/spec/dummy/tmp/cache/5D0/961/authz%2Froles%2F1-20190127110835779819%2Factive_storage%2Fdisk%2Fupdate +0 -0
  201. data/spec/dummy/tmp/cache/7F7/631/authz%2Froles%2F1-20190127110835632087%2Fauthz%2Fcontroller_actions%2Fcreate +0 -0
  202. data/spec/dummy/tmp/cache/7F9/C31/authz%2Froles%2F1-20190127110835637354%2Fauthz%2Fcontroller_actions%2Fcreate +0 -0
  203. data/spec/dummy/tmp/cache/803/FB1/authz%2Froles%2F1-20190127110854060872%2Fauthz%2Fbusiness_processes%2Fcreate +0 -0
  204. data/spec/dummy/tmp/cache/806/D11/authz%2Froles%2F1-20190127110854088405%2Fauthz%2Fcontroller_actions%2Fupdate +0 -0
  205. data/spec/dummy/tmp/cache/807/F31/authz%2Froles%2F1-20190127110854083663%2Fauthz%2Fcontroller_actions%2Fupdate +0 -0
  206. data/spec/dummy/tmp/cache/809/F21/authz%2Froles%2F1-20190127110854067394%2Fauthz%2Fbusiness_processes%2Fcreate +0 -0
  207. data/spec/dummy/tmp/cache/890/B31/authz%2Froles%2F1-20190127110854157300%2Fauthz%2Fvalidations%2Frole_names%2Fnew +0 -0
  208. data/spec/dummy/tmp/cache/899/251/authz%2Froles%2F1-20190127110854153349%2Fauthz%2Fvalidations%2Frole_names%2Fnew +0 -0
  209. data/spec/dummy/tmp/cache/960/401/authz%2Froles%2F1-20190127110835746022%2Fauthz%2Fvalidations%2Faction_names%2Fnew +0 -0
  210. data/spec/dummy/tmp/cache/963/B81/authz%2Froles%2F1-20190127110835530943%2Fauthz%2Fvalidations%2Faction_names%2Fnew +0 -0
  211. data/spec/dummy/tmp/cache/965/101/authz%2Froles%2F1-20190127110835526166%2Fauthz%2Fvalidations%2Faction_names%2Fnew +0 -0
  212. data/spec/dummy/tmp/cache/965/1E1/authz%2Froles%2F1-20190127110835672092%2Fauthz%2Fvalidations%2Faction_names%2Fnew +0 -0
  213. data/spec/dummy/tmp/cache/966/511/authz%2Froles%2F1-20190127110835690543%2Fauthz%2Fvalidations%2Faction_names%2Fnew +0 -0
  214. data/spec/dummy/tmp/cache/968/C81/authz%2Froles%2F1-20190128040837713760%2Fauthz%2Fvalidations%2Faction_names%2Fnew +0 -0
  215. data/spec/dummy/tmp/cache/969/E41/authz%2Froles%2F1-20190127110835695460%2Fauthz%2Fvalidations%2Faction_names%2Fnew +0 -0
  216. data/spec/dummy/tmp/cache/96D/AC1/authz%2Froles%2F1-20190128040837707762%2Fauthz%2Fvalidations%2Faction_names%2Fnew +0 -0
  217. data/spec/dummy/tmp/cache/96E/BB1/authz%2Froles%2F1-20190127110835678329%2Fauthz%2Fvalidations%2Faction_names%2Fnew +0 -0
  218. data/spec/dummy/tmp/cache/96F/051/authz%2Froles%2F1-20190128040837753376%2Fauthz%2Fvalidations%2Faction_names%2Fnew +0 -0
  219. data/spec/dummy/tmp/cache/96F/0D1/authz%2Froles%2F1-20190128040837749236%2Fauthz%2Fvalidations%2Faction_names%2Fnew +0 -0
  220. data/spec/dummy/tmp/cache/970/121/authz%2Froles%2F1-20190127110835748387%2Fauthz%2Fvalidations%2Faction_names%2Fnew +0 -0
  221. data/spec/dummy/tmp/cache/A1B/371/authz%2Froles%2F1-20190128040837498701%2Fauthz%2Fstale_controller_actions%2Findex +0 -0
  222. data/spec/dummy/tmp/cache/AE1/7D1/authz%2Froles%2F1-20190128040837640643%2Fauthz%2Fpending_controller_actions%2Findex +0 -0
  223. data/spec/dummy/tmp/cache/AEC/951/authz%2Froles%2F1-20190128040837647890%2Fauthz%2Fpending_controller_actions%2Findex +0 -0
  224. data/spec/dummy/tmp/cache/B2A/501/authz%2Froles%2F1-20190127110854176091%2Fauthz%2Fvalidations%2Fcontroller_names%2Fnew +0 -0
  225. data/spec/dummy/tmp/cache/B2B/811/authz%2Froles%2F1-20190127110854171970%2Fauthz%2Fvalidations%2Fcontroller_names%2Fnew +0 -0
  226. data/spec/dummy/tmp/cache/B2D/ED1/authz%2Froles%2F1-20190127110853951517%2Fauthz%2Fvalidations%2Fcontroller_names%2Fnew +0 -0
  227. data/spec/dummy/tmp/cache/B2F/5E1/authz%2Froles%2F1-20190127110853948351%2Fauthz%2Fvalidations%2Fcontroller_names%2Fnew +0 -0
  228. data/spec/dummy/tmp/cache/B31/A91/authz%2Froles%2F1-20190127110835494096%2Fauthz%2Fvalidations%2Fcontroller_names%2Fnew +0 -0
  229. data/spec/dummy/tmp/cache/D97/BF0/authz%2Froles%2F1-20190128040835814110%2Ffoo%2Fbar +0 -0
  230. data/spec/dummy/tmp/cache/DA2/2E0/authz%2Froles%2F1-20190127110834092865%2Ffoo%2Fbar +0 -0
  231. data/spec/dummy/tmp/cache/DA3/2E0/authz%2Froles%2F1-20190127110834116887%2Ffoo%2Fbar +0 -0
  232. data/spec/dummy/tmp/cache/DA5/920/authz%2Froles%2F1-20190128040835790652%2Ffoo%2Fbar +0 -0
  233. data/spec/dummy/tmp/cache/DA7/840/authz%2Froles%2F1-20190127110852566648%2Ffoo%2Fbar +0 -0
  234. data/spec/dummy/tmp/cache/DAB/C10/authz%2Froles%2F1-20190127110852587469%2Ffoo%2Fbar +0 -0
  235. data/spec/dummy/tmp/cache/DAE/A51/authz%2Froles%2F1-20190127110835732830%2Fauthz%2Fvalidations%2Fbusiness_process_names%2Fnew +0 -0
  236. data/spec/dummy/tmp/cache/DBA/341/authz%2Froles%2F1-20190127110835728288%2Fauthz%2Fvalidations%2Fbusiness_process_names%2Fnew +0 -0
  237. data/spec/dummy/tmp/cache/E07/D01/authz%2Froles%2F1-20190127110854140455%2Fauthz%2Fvalidations%2Fbusiness_process_names%2Fedit +0 -0
  238. data/spec/dummy/tmp/cache/E0B/B51/authz%2Froles%2F1-20190127110854138029%2Fauthz%2Fvalidations%2Fbusiness_process_names%2Fedit +0 -0
  239. data/spec/dummy/tmp/cache/E1A/161/authz%2Froles%2F1-20190127110853933798%2Fauthz%2Fvalidations%2Fbusiness_process_names%2Fedit +0 -0
  240. data/spec/dummy/tmp/cache/FF7/AB0/authz%2Froles%2F1-20190127110853131132%2FScopableByCity +0 -0
  241. data/spec/dummy/tmp/cache/FFE/3B0/authz%2Froles%2F1-20190127110853073062%2FScopableByCity +0 -0
  242. data/spec/dummy/tmp/cache/FFE/440/authz%2Froles%2F1-20190127110854208601%2FScopableByCity +0 -0
  243. data/spec/dummy/tmp/cache/FFF/4B0/authz%2Froles%2F1-20190127110854205344%2FScopableByCity +0 -0
  244. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-R/-Rd27mxikmD45wtjrRYVfNgffvFYvU8TQIIzsP6R1hw.cache +1 -0
  245. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/-Y/-YXHBgsO1rDX3csuIxRSykfDhvTjpWfRD79JDq5XOYg.cache +1 -0
  246. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/06/06jgPbWLt1ZaHdyxKq02UrRWwtg3nQxDcVTt6HyDhkg.cache +0 -0
  247. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/4Z/4Zv7_k3ZR-I0LRZwmLoDfWkCY2Xka22vSC5T9T7XyW4.cache +0 -0
  248. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/56/56IrgVQhknoutdXTn554y6xLK6qzPShy9jyQBGA04og.cache +0 -0
  249. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/57/57yTjkx1rMHVbi_OYtbmYbUk5W5m64h7Rg-iexcedMU.cache +0 -0
  250. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/5j/5jiFmsmKRsmTBIbfD09b25qywS4P-zXMcmYlkvaiDRQ.cache +1 -0
  251. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/64/64k-xleYFrc_lh2wnMwNYMDXBl_-1B4Ze9R2nRTKilI.cache +1 -0
  252. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7J/7Jk06yXHbV5WtN9zi_LTxjd270tlTeOK4F2pzoZzo8Y.cache +1 -0
  253. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7c/7cMwRZLmBohIS9StG7zZtPFEmK6jQbuCNneejms6SE4.cache +2 -0
  254. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/7x/7xocQ-QMRnSeWNIB3UZjQj1nnMBECUG-C707rAzUVYQ.cache +0 -0
  255. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Bv/bvtAeHfvzmQRIq3-WGqO6mBC_4W8iZUJz_4tNJLYw3s.cache +0 -0
  256. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ef/EFqMEM20D3WVdM-s3-Eas6EuaPUt-aMI42YExURDOu4.cache +0 -0
  257. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Fm/Fmfz-EZVGTNPpnMjpraw4Ea6TryVSaULcnA5_3zLGsU.cache +1 -0
  258. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ha/hAYPGYz_1tg7_uZZcwUHfedt-pxO0KAFXcYoPr6EwtU.cache +1 -0
  259. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/IJ/iJ970UpaGrzPCohpAHZMBwZB_mhdcxHwQvhKEb2OacI.cache +0 -0
  260. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/J2/j27wsK8nA3xHFQi8YYED5BaGxKot3-0FEr8LgRNNcWY.cache +1 -0
  261. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/JR/jRFupuyV3DLbD1aMskUchpc02fMKLLdT0ry-31VVAMc.cache +1 -0
  262. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ka/KafZLlB6ShYL8Exy4ncgT0A3dDW1LNzdE33pC5diMU0.cache +3 -0
  263. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/L8/L8IlCJH79sHlJnYZd8d_BkIfP5jEr0qDvp_ESuvQGsI.cache +0 -0
  264. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/L8/L8dw2waDsxn1AasMlkmCSRnFTYW3zLQ370V4eJTe8dQ.cache +0 -0
  265. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/LZ/LZFo2C3Yse1bLMo2Gv7ekuytjDXydWoY5_LXXYLt0QA.cache +1 -0
  266. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/OD/ODpfa-4eyCJlZ5SkyuDXoVlKmDFBU428tdW6Cns31d8.cache +0 -0
  267. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/OQ/OQUBRabidIMMaRkmtUyKg8O5NmmDdE9AHofQlMoNITU.cache +1 -0
  268. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Ph/PhMmXZ8gbC0yeY_avARgSFlC8qJB5FfKF3iztFzmyoI.cache +0 -0
  269. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/QJ/QJTKoNM5RWnsxOVD7VOuhtNnqYBZL0Xb3N22RAAIH2M.cache +0 -0
  270. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Q_/Q_HTY92KbXw-IdV58H_I22XXuk7zLs2a-UQLsI1MpSw.cache +1 -0
  271. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/Qb/QbcMLjh_bXo3fom7D_ZSiP3DdUa749uy00T5qlpCs4M.cache +1 -0
  272. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/U0/u0bBAxOPvSI-GCyBgZQhwog58g6FSa7jtLtP56KaCnw.cache +0 -0
  273. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/VX/VXtQ7Ticrj8nJ4u_r7-DYsnfTH5iy4nTbkkoiBhl5OA.cache +1 -0
  274. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/V_/v_Hy1dJtJeSjVztQCZlvjoXrHB2lDdjZL0RA1TTSZb8.cache +2 -0
  275. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/cg/cGO-XIyfpRtXX9d62jomRpKdRgKD77MuHXMXGqjgm2E.cache +0 -0
  276. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/eE/eEOBEi18GJKH4x93YxjGEdQpi-2SNEejUM6bPqOXPEc.cache +1 -0
  277. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/eT/eTHzEBuSL2RdJF2Y-fibOxcp6nXiuQJWbOpZGDbZ0zQ.cache +1 -0
  278. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/iB/iBYvLMB3AWQCWylGwyPt_hL-InH5T9clEpwx9isweMo.cache +1 -0
  279. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/ie/ieTt5LPukPnw2lzOdkLyqPaD2TvG1OyXbEhiN2Z_jVk.cache +0 -0
  280. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/kl/Kl2Bw_xEoZ4Igt7tuDeOF4xoM80YmsULcTt_Ifj_gn4.cache +0 -0
  281. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/l5/l5IoDFNqwI_JEVVE6sP_VrfPOv9MpdKd6z3xKP31dJM.cache +1 -0
  282. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/r-/r-wuVjraTkmU7fhj77nGLAul1c8pitNS2Xm0LbE_Xq4.cache +0 -0
  283. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/tJ/tJ66lOzYV-f8eOAmodrcmYLpGPlqb5MJ8SZy9htZfFE.cache +1 -0
  284. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/us/usXbDVSIhDv8eZ7O9LqUUFe3qAauXKIzHpXHzmmiBFo.cache +3 -0
  285. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/vl/vl1hU0_-pFzQYBDkfplo_ISUGuceAbgjiWBBVV3d5p8.cache +0 -0
  286. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/x8/x8h7poGyMaalks4R2cf4KEd-0IiMifnjs1llcaoegRQ.cache +0 -0
  287. data/spec/dummy/tmp/cache/assets/sprockets/v3.0/zV/zVF6uCTPzpqga97mOnqhEpbkgd9Zu0FFYUvECVyFPME.cache +0 -0
  288. data/spec/dummy/tmp/miniprofiler/mp_timers_187hju1x5n6mi2i9kwy5 +0 -0
  289. data/spec/dummy/tmp/miniprofiler/mp_timers_1a764xpdcpf31v7zrbgn +0 -0
  290. data/spec/dummy/tmp/miniprofiler/mp_timers_1hm0fw83c6figcjb8977 +0 -0
  291. data/spec/dummy/tmp/miniprofiler/mp_timers_1w42s2dv5u2591e6ukld +0 -0
  292. data/spec/dummy/tmp/miniprofiler/mp_timers_1wit4i8f11u8jxjfenx +0 -0
  293. data/spec/dummy/tmp/miniprofiler/mp_timers_1zh60dw2zn6ziqebc1d9 +0 -0
  294. data/spec/dummy/tmp/miniprofiler/mp_timers_2nturx040v8boeumxj7z +0 -0
  295. data/spec/dummy/tmp/miniprofiler/mp_timers_2u4izplra2bbo6ug5eau +0 -0
  296. data/spec/dummy/tmp/miniprofiler/mp_timers_30tdhgw7atjv3celnxkc +0 -0
  297. data/spec/dummy/tmp/miniprofiler/mp_timers_39k39n7qpoor2opykqum +0 -0
  298. data/spec/dummy/tmp/miniprofiler/mp_timers_3s4v3wtxxnw6qgucjfgg +0 -0
  299. data/spec/dummy/tmp/miniprofiler/mp_timers_3zisgxznswce9gardxll +0 -0
  300. data/spec/dummy/tmp/miniprofiler/mp_timers_417sbx8a25emgd0cqvyj +0 -0
  301. data/spec/dummy/tmp/miniprofiler/mp_timers_4h7x65dmn764i8k9eyg0 +0 -0
  302. data/spec/dummy/tmp/miniprofiler/mp_timers_4k254n57qc11mid4hua6 +0 -0
  303. data/spec/dummy/tmp/miniprofiler/mp_timers_5b9tlzc8hi941e69n3oi +0 -0
  304. data/spec/dummy/tmp/miniprofiler/mp_timers_5fllgowq1jpjsaniu4tj +0 -0
  305. data/spec/dummy/tmp/miniprofiler/mp_timers_5ghmli0qfyf505f74k5m +0 -0
  306. data/spec/dummy/tmp/miniprofiler/mp_timers_5j3yexdos33862solbmw +0 -0
  307. data/spec/dummy/tmp/miniprofiler/mp_timers_5sp80mwy96rmzgxy7u8b +0 -0
  308. data/spec/dummy/tmp/miniprofiler/mp_timers_5u89e0pr2g61tswjojf +0 -0
  309. data/spec/dummy/tmp/miniprofiler/mp_timers_6cn8n02vhfq7dqsk0msg +0 -0
  310. data/spec/dummy/tmp/miniprofiler/mp_timers_702r2xq4lrdk3lkzf34d +0 -0
  311. data/spec/dummy/tmp/miniprofiler/mp_timers_7e1u4vfrknvpvgpzlli +0 -0
  312. data/spec/dummy/tmp/miniprofiler/mp_timers_88mf8eeq0kg0btnk1tsr +0 -0
  313. data/spec/dummy/tmp/miniprofiler/mp_timers_8b2paye75l2s0ofv7sl2 +0 -0
  314. data/spec/dummy/tmp/miniprofiler/mp_timers_8ggwym87fnx1ek5n2ugl +0 -0
  315. data/spec/dummy/tmp/miniprofiler/mp_timers_8lgaubceig1hxua2j8eb +0 -0
  316. data/spec/dummy/tmp/miniprofiler/mp_timers_8ri6f3r80by2d183ir1k +0 -0
  317. data/spec/dummy/tmp/miniprofiler/mp_timers_96nq91ephrdwhqia8w7n +0 -0
  318. data/spec/dummy/tmp/miniprofiler/mp_timers_9n7da3i0wzp0jk5nulci +0 -0
  319. data/spec/dummy/tmp/miniprofiler/mp_timers_9xldehtex9ajcto0arl7 +0 -0
  320. data/spec/dummy/tmp/miniprofiler/mp_timers_9zyae313iort9c2vvszv +0 -0
  321. data/spec/dummy/tmp/miniprofiler/mp_timers_a2o4dvv3yf7om0xtu2v9 +0 -0
  322. data/spec/dummy/tmp/miniprofiler/mp_timers_a82lq59f7h7bmd43zd4v +0 -0
  323. data/spec/dummy/tmp/miniprofiler/mp_timers_ab140kzrvfvrdpe51h33 +0 -0
  324. data/spec/dummy/tmp/miniprofiler/mp_timers_acszjy6pg2865zwro631 +0 -0
  325. data/spec/dummy/tmp/miniprofiler/mp_timers_amccudzpki797e8axzsx +0 -0
  326. data/spec/dummy/tmp/miniprofiler/mp_timers_b8dw4y22ye3lrfy8udxl +0 -0
  327. data/spec/dummy/tmp/miniprofiler/mp_timers_bege2sph0y29u14sgcb6 +0 -0
  328. data/spec/dummy/tmp/miniprofiler/mp_timers_bptf82tzea0x6f7749ue +0 -0
  329. data/spec/dummy/tmp/miniprofiler/mp_timers_c71xvd4l552e8rf9xgoa +0 -0
  330. data/spec/dummy/tmp/miniprofiler/mp_timers_c9jxnijeijnvo5ibfnge +0 -0
  331. data/spec/dummy/tmp/miniprofiler/mp_timers_cloepe2cib08aah3m0tf +0 -0
  332. data/spec/dummy/tmp/miniprofiler/mp_timers_dw5zuonuszmngzs9f9je +0 -0
  333. data/spec/dummy/tmp/miniprofiler/mp_timers_e2tvoybct2ekv003517t +0 -0
  334. data/spec/dummy/tmp/miniprofiler/mp_timers_ec4yn54051nroqy0zpzk +0 -0
  335. data/spec/dummy/tmp/miniprofiler/mp_timers_ewvfmpuy52bl32yl4w76 +0 -0
  336. data/spec/dummy/tmp/miniprofiler/mp_timers_f7fkv10o4bvo18xarq8k +0 -0
  337. data/spec/dummy/tmp/miniprofiler/mp_timers_fbv264znwzvhn5pr6t5n +0 -0
  338. data/spec/dummy/tmp/miniprofiler/mp_timers_fvtylga8qbigiq6mwbkw +0 -0
  339. data/spec/dummy/tmp/miniprofiler/mp_timers_fydcxg8u9id6ieereqr3 +0 -0
  340. data/spec/dummy/tmp/miniprofiler/mp_timers_guh2bm3s8bqj4rhhf3a5 +0 -0
  341. data/spec/dummy/tmp/miniprofiler/mp_timers_h2midzc2ye2pohpl5cer +0 -0
  342. data/spec/dummy/tmp/miniprofiler/mp_timers_h342u3pib6a4tvq7oceq +0 -0
  343. data/spec/dummy/tmp/miniprofiler/mp_timers_hey9juod6ojv2b8639ro +0 -0
  344. data/spec/dummy/tmp/miniprofiler/mp_timers_hhfvzgpt7y1es9jibgia +0 -0
  345. data/spec/dummy/tmp/miniprofiler/mp_timers_hitjlz14owgzskm53bys +0 -0
  346. data/spec/dummy/tmp/miniprofiler/mp_timers_hkar1o224dwvtlc0e7f0 +0 -0
  347. data/spec/dummy/tmp/miniprofiler/mp_timers_hze7dtyohmbmpgshamho +0 -0
  348. data/spec/dummy/tmp/miniprofiler/mp_timers_i76hzgqprcv8vo96t286 +0 -0
  349. data/spec/dummy/tmp/miniprofiler/mp_timers_iarkaw5h0mu96fn8vumk +0 -0
  350. data/spec/dummy/tmp/miniprofiler/mp_timers_iishx5em9684wvzso08k +0 -0
  351. data/spec/dummy/tmp/miniprofiler/mp_timers_jgd14rth6d6vi27unp3t +0 -0
  352. data/spec/dummy/tmp/miniprofiler/mp_timers_k0jvvelcuxy7pii4nm85 +0 -0
  353. data/spec/dummy/tmp/miniprofiler/mp_timers_k0o1qnjaix25iieza416 +0 -0
  354. data/spec/dummy/tmp/miniprofiler/mp_timers_k82597radi4b247lvivw +0 -0
  355. data/spec/dummy/tmp/miniprofiler/mp_timers_knb7s4h5xkozpwevg24y +0 -0
  356. data/spec/dummy/tmp/miniprofiler/mp_timers_knxptkz77y17j5599ygu +0 -0
  357. data/spec/dummy/tmp/miniprofiler/mp_timers_kt68mdzb1qtbzqpzp08x +0 -0
  358. data/spec/dummy/tmp/miniprofiler/mp_timers_liedyxesnobjc7whhdxj +0 -0
  359. data/spec/dummy/tmp/miniprofiler/mp_timers_lshk7ojnk14wxh80xwud +0 -0
  360. data/spec/dummy/tmp/miniprofiler/mp_timers_lyofuv63r88ovlkbxt6k +0 -0
  361. data/spec/dummy/tmp/miniprofiler/mp_timers_mo3y89mlusn2jl9cvens +0 -0
  362. data/spec/dummy/tmp/miniprofiler/mp_timers_nai0kefo9jwuplqy1so5 +0 -0
  363. data/spec/dummy/tmp/miniprofiler/mp_timers_nayvel43ioozxapz8fzq +0 -0
  364. data/spec/dummy/tmp/miniprofiler/mp_timers_nsscz5obn1h46pzl0iew +0 -0
  365. data/spec/dummy/tmp/miniprofiler/mp_timers_nv0kz4jjpl5v1gnkhhay +0 -0
  366. data/spec/dummy/tmp/miniprofiler/mp_timers_oc3yb5cwqb4hcrsgqe5x +0 -0
  367. data/spec/dummy/tmp/miniprofiler/mp_timers_oqvlsq2c6cqyoz3lhq1s +0 -0
  368. data/spec/dummy/tmp/miniprofiler/mp_timers_pjl56ptsg7yamnyfb1jx +0 -0
  369. data/spec/dummy/tmp/miniprofiler/mp_timers_pmonw2e2up3jw0uev3fd +0 -0
  370. data/spec/dummy/tmp/miniprofiler/mp_timers_pmz1t8pta7z8x4168mpo +0 -0
  371. data/spec/dummy/tmp/miniprofiler/mp_timers_pwv3rxn9sqmw2wo3do5s +0 -0
  372. data/spec/dummy/tmp/miniprofiler/mp_timers_qbvhh2osf2y47f2gki90 +0 -0
  373. data/spec/dummy/tmp/miniprofiler/mp_timers_qjsnbxe69u1trc1dk08u +0 -0
  374. data/spec/dummy/tmp/miniprofiler/mp_timers_qpi7ivfg58mi9ewlfehh +0 -0
  375. data/spec/dummy/tmp/miniprofiler/mp_timers_qwk858k34ubgydgg6vbn +0 -0
  376. data/spec/dummy/tmp/miniprofiler/mp_timers_r0gckl8vcsveialr5oms +0 -0
  377. data/spec/dummy/tmp/miniprofiler/mp_timers_r5kvkcmgmmk0n0o2lab2 +0 -0
  378. data/spec/dummy/tmp/miniprofiler/mp_timers_ri87c0cqgs631occqkr0 +0 -0
  379. data/spec/dummy/tmp/miniprofiler/mp_timers_rlgpsiubx8judxzo29xz +0 -0
  380. data/spec/dummy/tmp/miniprofiler/mp_timers_rmtb9ghiw9cm5jmsytef +0 -0
  381. data/spec/dummy/tmp/miniprofiler/mp_timers_s6uxc7rfwc4cpzk9r6hf +0 -0
  382. data/spec/dummy/tmp/miniprofiler/mp_timers_sln7valbzdzj0zg4f7jg +0 -0
  383. data/spec/dummy/tmp/miniprofiler/mp_timers_srrktnyxd0r4u6fedaux +0 -0
  384. data/spec/dummy/tmp/miniprofiler/mp_timers_st3hm0g535kumlya4xtj +0 -0
  385. data/spec/dummy/tmp/miniprofiler/mp_timers_t6tghtqo63bmw01jj3m4 +0 -0
  386. data/spec/dummy/tmp/miniprofiler/mp_timers_taiz6atzpgphlzbm2wrb +0 -0
  387. data/spec/dummy/tmp/miniprofiler/mp_timers_tlzdb030wtoay4c44zo1 +0 -0
  388. data/spec/dummy/tmp/miniprofiler/mp_timers_tvnjul7ghjcoznsfyzyo +0 -0
  389. data/spec/dummy/tmp/miniprofiler/mp_timers_u2q34z8jis8tai294vma +0 -0
  390. data/spec/dummy/tmp/miniprofiler/mp_timers_u671nb6kr9gae8ov4uig +0 -0
  391. data/spec/dummy/tmp/miniprofiler/mp_timers_uc2c9zdcnwutaqw29ye1 +0 -0
  392. data/spec/dummy/tmp/miniprofiler/mp_timers_ucy6imgqfjel3qltypwe +0 -0
  393. data/spec/dummy/tmp/miniprofiler/mp_timers_vpixbik937gia1ajrhgm +0 -0
  394. data/spec/dummy/tmp/miniprofiler/mp_timers_vzjhhh4r0rtcmyg350e +0 -0
  395. data/spec/dummy/tmp/miniprofiler/mp_timers_wk3vmc321ckja22un8s9 +0 -0
  396. data/spec/dummy/tmp/miniprofiler/mp_timers_wl8yxbv5akh2duk274oa +0 -0
  397. data/spec/dummy/tmp/miniprofiler/mp_timers_wr3aes4db02152qssu06 +0 -0
  398. data/spec/dummy/tmp/miniprofiler/mp_timers_wsn9ae71bdj1cn704vkb +0 -0
  399. data/spec/dummy/tmp/miniprofiler/mp_timers_x8rv1l0cshouxoijtibl +0 -0
  400. data/spec/dummy/tmp/miniprofiler/mp_timers_zeywv4otu18bcflfrjw0 +0 -0
  401. data/spec/dummy/tmp/miniprofiler/mp_timers_zvmyxy0mknzhff9fbyi0 +0 -0
  402. data/spec/dummy/tmp/miniprofiler/mp_views_127.0.0.1 +1 -1
  403. data/spec/dummy/tmp/pids/server.pid +1 -1
  404. metadata +736 -5
  405. data/app/assets/stylesheets/authz/multiselect.scss +0 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 64a9c75133e213a41cc09207af72865b97c6a24e3a696daef8c110b3c02559d4
4
- data.tar.gz: c4d34fff38988c1316b34ebd7110d63d84c5b591a822d93dd4131d880a604e30
3
+ metadata.gz: 11eb26576b75d07281811a8edd39f3466efa899b50b43449ae52e5773bd2f70c
4
+ data.tar.gz: fbea210889be2ac5ecacea9375b209769a5dae48965f689114240d9e2cf28423
5
5
  SHA512:
6
- metadata.gz: 35a1d18c6d9b8fff1040cfcc5d299fa44b0909efcd19d953104dc4b7f7f6651b10b1ab529cb71932695970d39285af28a6775e22f5a3094c1b22d31f595b056e
7
- data.tar.gz: ac8a025937abc904166ae87589775379bf9698fd5a36718c4e20fad8b92d5987055350939380c2e6b54b13a60ebd10d9a2fd25a82ee351b0ded429741178a6f3
6
+ metadata.gz: 02dfc204ff545e89978836ebdf3e7380a49e33baa672aaf699c0e505a4cde32c90380cd130318a3fc49b14047388907de401fbcd7aa7abae589fad77fb27f16f
7
+ data.tar.gz: 8d2ddb35760c635f4ec0bd48bff13b6ce888495d17651aae1528ada79020648a489208db705abf87436317acaaa91c00cf2b6a5ea74a80138b44432f53103120
data/README.md CHANGED
@@ -101,7 +101,7 @@ $ bundle install
101
101
 
102
102
  Then install Authz executing:
103
103
  ```bash
104
- $ rails authz:install
104
+ $ rails g authz:install
105
105
  # => config/initializer/authz.rb gets created
106
106
  # => The authz migrations are installed
107
107
  $ rails db:migrate
@@ -583,7 +583,7 @@ can be significant in applications with highly dynamic views and requires specia
583
583
 
584
584
  Authz implements 3 different caching strategies to meet production-grade performance needs.
585
585
 
586
- #### In-request caching
586
+ ### In-request caching
587
587
  Authz uses [Active Record's SQL caching](https://guides.rubyonrails.org/caching_with_rails.html#sql-caching)
588
588
  to guarantee that any query that is repeated during the request-response cycle is not re-run against your database.
589
589
  This is a built-in feature and as developer you don't have to do anything to benefit from it.
@@ -591,7 +591,9 @@ This is a built-in feature and as developer you don't have to do anything to ben
591
591
  _Some developers like to silence the logging from Active Record's CACHE as it can
592
592
  pollute your logs. [Learn how to to that here.](https://github.com/serodriguez68/authz/wiki/Disable-Logging-of-CACHEd-SQL-queries-in-Rails)_
593
593
 
594
- #### Cross-request caching
594
+ [Back to table of content](#table-of-content)
595
+
596
+ ### Cross-request caching
595
597
  Cross-request caching allows Authz to build a cache that can be re-used across multiple requests,
596
598
  reducing sharply the number of authorization related calls to your database.
597
599
 
@@ -605,7 +607,9 @@ To enable this feature:
605
607
  This can be toggled by running `rails dev:cache` on your terminal.
606
608
  3. Go to `config/initilizers/authz.rb` and set `config.cross_request_caching = true`.
607
609
 
608
- #### Fragment and Russian Doll caching
610
+ [Back to table of content](#table-of-content)
611
+
612
+ ### Fragment and Russian Doll caching
609
613
  _Note:_
610
614
 
611
615
  _There are only two hard things in Computer Science: cache invalidation and naming things.
@@ -686,6 +690,7 @@ However, _"mine"_ can resolve to different departments for `alice` and `bob` des
686
690
  a consequence, we need to include information about the departments in addition to `#roles_cache_key`in the fragment
687
691
  keys.
688
692
 
693
+ [Back to table of content](#table-of-content)
689
694
 
690
695
  ## Authorization Good and Bad Practices
691
696
  A non exhaustive list of generally accepted authorization wisdom and things we've learned from using Authz ourselves:
@@ -736,6 +741,7 @@ If you don't, you will get an `ActionController::RoutingError No route matches..
736
741
  if you mounted Authz `as: authz` in your router, use:
737
742
  ```authz_link_to 'Authorization Admin', authz.root_url, skip_scoping: true```.
738
743
 
744
+ [Back to table of content](#table-of-content)
739
745
 
740
746
  ## License
741
747
  Licensed under the MIT license, see the separate LICENSE.txt file.
@@ -0,0 +1,18 @@
1
+ window.azFlash = {
2
+ init: function(){
3
+ $('.az-flash').addClass('is-active')
4
+ this.bindClickToClose();
5
+ window.setTimeout(function(){
6
+ $('.az-flash').removeClass('is-active')
7
+ }, 6000)
8
+ },
9
+ bindClickToClose: function(){
10
+ $('.az-flash-close').click(function(){
11
+ $(this).parent().removeClass('is-active')
12
+ })
13
+ }
14
+ }
15
+
16
+ $(document).ready(function() {
17
+ window.azFlash.init()
18
+ })
@@ -0,0 +1,2 @@
1
+ // Place all the behaviors and hooks related to the matching controller here.
2
+ // All this logic will automatically be available in application.js.
@@ -0,0 +1 @@
1
+ .ms-container{background:transparent no-repeat 50% 50%;width:370px}.ms-container:after{content:".";display:block;height:0;line-height:0;font-size:0;clear:both;min-height:0;visibility:hidden}.ms-container .ms-selectable,.ms-container .ms-selection{background:#fff;color:#555555;float:left;width:45%}.ms-container .ms-selection{float:right}.ms-container .ms-list{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-webkit-transition:border linear 0.2s, box-shadow linear 0.2s;-moz-transition:border linear 0.2s, box-shadow linear 0.2s;-ms-transition:border linear 0.2s, box-shadow linear 0.2s;-o-transition:border linear 0.2s, box-shadow linear 0.2s;transition:border linear 0.2s, box-shadow linear 0.2s;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;position:relative;height:200px;padding:0;overflow-y:auto}.ms-container .ms-list.ms-focus{border-color:rgba(82,168,236,0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075),0 0 8px rgba(82,168,236,0.6);outline:0;outline:thin dotted \9}.ms-container ul{margin:0;list-style-type:none;padding:0}.ms-container .ms-optgroup-container{width:100%}.ms-container .ms-optgroup-label{margin:0;padding:5px 0px 0px 5px;cursor:pointer;color:#999}.ms-container .ms-selectable li.ms-elem-selectable,.ms-container .ms-selection li.ms-elem-selection{border-bottom:1px #eee solid;padding:2px 10px;color:#555;font-size:14px}.ms-container .ms-selectable li.ms-hover,.ms-container .ms-selection li.ms-hover{cursor:pointer;color:#fff;text-decoration:none;background-color:#08c}.ms-container .ms-selectable li.disabled,.ms-container .ms-selection li.disabled{background-color:#eee;color:#aaa;cursor:text}
@@ -8,6 +8,9 @@ $sidebar-width: 250px
8
8
  overflow-x: hidden
9
9
  overflow-y: scroll
10
10
  padding: 1rem
11
+ display: flex
12
+ flex-direction: column
13
+ justify-content: space-between
11
14
 
12
15
  .az-content
13
16
  padding-left: $sidebar-width
@@ -27,3 +30,17 @@ table.table
27
30
  &.is-clickable
28
31
  &:hover
29
32
  cursor: pointer
33
+
34
+ .az-flash
35
+ max-width: 18rem
36
+ position: fixed
37
+ transition: all 0.5s ease
38
+ z-index: 10
39
+ right: 2rem
40
+ bottom: 2rem
41
+ transform: translate(calc(18rem + 3rem), 0rem)
42
+ &.is-bottom-right
43
+ bottom: 2rem
44
+ right: 2rem
45
+ &.is-active
46
+ transform: translate(0rem, 0rem)
@@ -0,0 +1,45 @@
1
+ require_dependency "authz/application_controller"
2
+
3
+ module Authz
4
+ class Bulk::ControllerActionsController < ApplicationController
5
+
6
+ def create
7
+ if params[:create_all] = 'true'
8
+ ActiveRecord::Base.transaction do
9
+ @pending_actions = ::Authz::ControllerAction.pending
10
+ @pending_actions.each do |controller_action_hash|
11
+ ::Authz::ControllerAction.create!(
12
+ controller: controller_action_hash[:controller],
13
+ action: controller_action_hash[:action],
14
+ )
15
+ end
16
+ end
17
+ flash[:success] = "#{@pending_actions.count} actions successfully created!"
18
+ redirect_to root_path
19
+ else
20
+ flash[:notice] = 'Partial bulk creation not implemented yet'
21
+ redirect_to root_path
22
+ end
23
+ end
24
+
25
+ def destroy
26
+ if params[:destroy_all] = 'true'
27
+ ActiveRecord::Base.transaction do
28
+ @stale_actions = ::Authz::ControllerAction.stale
29
+ @stale_actions.each do |controller_action_hash|
30
+ ::Authz::ControllerAction.find_by(
31
+ controller: controller_action_hash[:controller],
32
+ action: controller_action_hash[:action],
33
+ ).destroy!
34
+ end
35
+ end
36
+ flash[:success] = "#{@stale_actions.count} actions successfully destroyed!"
37
+ redirect_to root_path
38
+ else
39
+ flash[:notice] = 'Partial bulk deletion not implemented yet'
40
+ redirect_to root_path
41
+ end
42
+ end
43
+
44
+ end
45
+ end
@@ -21,7 +21,9 @@ module Authz
21
21
  @business_process = BusinessProcess.new(business_process_params)
22
22
  if @business_process.save
23
23
  redirect_to business_process_path(@business_process)
24
+ flash[:success] = "#{@business_process.name} created successfully"
24
25
  else
26
+ flash.now[:error] = "There was an issue creating this business process"
25
27
  render 'new'
26
28
  end
27
29
  end
@@ -33,8 +35,10 @@ module Authz
33
35
  def update
34
36
  @business_process = BusinessProcess.find(params[:id])
35
37
  if @business_process.update(business_process_params)
38
+ flash[:success] = "#{@business_process.name} updated successfully"
36
39
  redirect_to business_process_path(@business_process)
37
40
  else
41
+ flash.now[:error] = "There was an issue updating this business process"
38
42
  render 'edit'
39
43
  end
40
44
  end
@@ -42,8 +46,10 @@ module Authz
42
46
  def destroy
43
47
  @business_process = BusinessProcess.find(params[:id])
44
48
  if @business_process.destroy
49
+ flash[:success] = "#{@business_process.name} destroyed successfully"
45
50
  redirect_to business_processes_path
46
51
  else
52
+ flash.now[:error] = "There was an issue destroying #{@business_process.name}"
47
53
  render 'show'
48
54
  end
49
55
  end
@@ -19,8 +19,10 @@ module Authz
19
19
  def create
20
20
  @controller_action = ControllerAction.new(controller_action_create_params)
21
21
  if @controller_action.save
22
+ flash[:success] = "#{@controller_action.to_s} created successfully"
22
23
  redirect_to controller_action_path(@controller_action)
23
24
  else
25
+ flash.now[:error] = "There was an issue creating this controller action"
24
26
  render 'new'
25
27
  end
26
28
  end
@@ -32,8 +34,10 @@ module Authz
32
34
  def update
33
35
  @controller_action = ControllerAction.find(params[:id])
34
36
  if @controller_action.update(controller_action_update_params)
37
+ flash[:success] = "#{@controller_action.to_s} updated successfully"
35
38
  redirect_to controller_action_path(@controller_action)
36
39
  else
40
+ flash.now[:error] = "There was an issue updating #{@controller_action.to_s}"
37
41
  render 'edit'
38
42
  end
39
43
  end
@@ -41,8 +45,10 @@ module Authz
41
45
  def destroy
42
46
  @controller_action = ControllerAction.find(params[:id])
43
47
  if @controller_action.destroy
48
+ flash[:success] = "#{@controller_action.to_s} destroyed successfully"
44
49
  redirect_to controller_actions_path
45
50
  else
51
+ flash.now[:error] = "There was an issue destroying #{@controller_action.to_s}"
46
52
  render 'show'
47
53
  end
48
54
  end
@@ -3,13 +3,8 @@ require_dependency "authz/application_controller"
3
3
  module Authz
4
4
  class HomeController < ApplicationController
5
5
  def index
6
- routes = Rails.application.routes.set.anchored_routes.map(&:defaults).uniq
7
- not_found = []
8
- routes.each do |route|
9
- ca = ControllerAction.find_by(controller: route[:controller], action: route[:action])
10
- not_found << route unless ca
11
- end
12
- @non_created_controller_actions = not_found
6
+ @pending_controller_actions = ControllerAction.pending
7
+ @stale_controller_actions = ControllerAction.stale
13
8
  @invalid_scoping_rules = ScopingRule.where.not(scopable: Authz::Scopables::Base.get_scopables_names).pluck(:scopable).uniq
14
9
  end
15
10
  end
@@ -0,0 +1,10 @@
1
+ require_dependency "authz/application_controller"
2
+
3
+ module Authz
4
+ class PendingControllerActionsController < ApplicationController
5
+ def index
6
+ @pending_controller_actions = ControllerAction.pending
7
+ .sort_by { |ca| ca[:controller] }
8
+ end
9
+ end
10
+ end
@@ -20,8 +20,10 @@ module Authz
20
20
  def update
21
21
  @rolable = rolable.find(params[:id])
22
22
  if @rolable.update(rolable_params)
23
+ flash[:success] = "#{@rolable.authz_label} updated successfully"
23
24
  redirect_to send("#{@rolable.model_name.singular}_path", @rolable)
24
25
  else
26
+ flash.now[:error] = "There was an issue updating #{@rolable.authz_label}"
25
27
  render 'edit'
26
28
  end
27
29
  end
@@ -25,8 +25,10 @@ module Authz
25
25
  def create
26
26
  @role = Role.new(role_params)
27
27
  if @role.save
28
+ flash[:success] = "#{@role.name} created successfully"
28
29
  redirect_to role_path(@role)
29
30
  else
31
+ flash.now[:error] = "There was an issue creating this role"
30
32
  render 'new'
31
33
  end
32
34
  end
@@ -38,8 +40,10 @@ module Authz
38
40
  def update
39
41
  @role = Role.find(params[:id])
40
42
  if @role.update(role_params)
43
+ flash[:success] = "#{@role.name} updated successfully"
41
44
  redirect_to role_path(@role)
42
45
  else
46
+ flash.now[:error] = "There was an issue updating this role"
43
47
  render 'edit'
44
48
  end
45
49
  end
@@ -47,8 +51,10 @@ module Authz
47
51
  def destroy
48
52
  @role = Role.find(params[:id])
49
53
  if @role.destroy
54
+ flash[:success] = "#{@role.name} destroyed successfully"
50
55
  redirect_to roles_path
51
56
  else
57
+ flash.now[:error] = "There was an issue destroying #{@role.name}"
52
58
  render 'show'
53
59
  end
54
60
  end
@@ -15,8 +15,10 @@ module Authz
15
15
  @scoping_rule = ScopingRule.new(scoping_rule_params.merge(authz_role_id: @role.id))
16
16
  @available_keywords = @scopable.constantize.available_keywords
17
17
  if @scoping_rule.save
18
+ flash[:success] = "Configured #{@scoping_rule.scopable}:#{@scoping_rule.keyword} for #{@role.name}"
18
19
  redirect_to role_path(@role)
19
20
  else
21
+ flash.now[:error] = 'There was an issue adding this scoping rule'
20
22
  render 'new'
21
23
  end
22
24
  end
@@ -31,8 +33,10 @@ module Authz
31
33
  @role = Role.find(params[:role_id])
32
34
  @scoping_rule = ScopingRule.find(params[:id])
33
35
  if @scoping_rule.update(scoping_rule_update_params)
36
+ flash[:success] = "Configured #{@scoping_rule.scopable}:#{@scoping_rule.keyword} for #{@role.name}"
34
37
  redirect_to role_path(@role)
35
38
  else
39
+ flash.now[:error] = 'There was an issue updating this scoping rule'
36
40
  @available_keywords = @scoping_rule.scopable.constantize.available_keywords
37
41
  render 'edit'
38
42
  end
@@ -0,0 +1,9 @@
1
+ require_dependency "authz/application_controller"
2
+
3
+ module Authz
4
+ class StaleControllerActionsController < ApplicationController
5
+ def index
6
+ @stale_controller_actions = ControllerAction.stale
7
+ end
8
+ end
9
+ end
@@ -1,16 +1,16 @@
1
1
  module Authz
2
2
  module ApplicationHelper
3
- # def title(text)
4
- # content_for :title, text
5
- # end
6
- #
7
- # def meta_title
8
- # if content_for?(:title)
9
- # "#{yield(:title)} | Authz"
10
- # else
11
- # "Authz"
12
- # end
13
- # end
14
-
3
+ def flash_class(name)
4
+ case name
5
+ when 'success'
6
+ 'is-success'
7
+ when 'error'
8
+ 'is-danger'
9
+ when 'notice'
10
+ 'is-primary'
11
+ when 'alert'
12
+ 'is-warning'
13
+ end
14
+ end
15
15
  end
16
16
  end
@@ -51,6 +51,35 @@ module Authz
51
51
  res
52
52
  end
53
53
 
54
+ # Returns array of controller actions found in router but not in controller actions
55
+ def self.pending
56
+ # TODO: Refactor and test
57
+ ca_pairs = []
58
+ reachable_controller_actions.each do | c_name, action_arr |
59
+ action_arr.each do |a_name|
60
+ ca_pairs << { controller: c_name, action: a_name }
61
+ end
62
+ end
63
+
64
+ pending = []
65
+ ca_pairs.each do |route|
66
+ ca = find_by(controller: route[:controller], action: route[:action])
67
+ pending << route unless ca
68
+ end
69
+
70
+ pending
71
+ end
72
+
73
+ def self.stale
74
+ # TODO: Refactor and test
75
+ stale = []
76
+ find_each do |ca|
77
+ is_included = reachable_controller_actions[ca.controller].try(:include?, ca.action)
78
+ stale << ca unless is_included
79
+ end
80
+ stale
81
+ end
82
+
54
83
  # Instance Methods
55
84
  # ==========================================================================
56
85
  def to_s
@@ -1,37 +1,62 @@
1
-
2
1
  = content_for :nav_title do
3
2
  | Maintenance Dashboard
4
3
 
5
4
  section.section
6
5
  .container
7
- h2.title.is-4 Controller Actions
6
+ h2.title Controller Actions
8
7
  .columns
9
- .column.is-one-quarter
10
- .card
11
- .card-content.has-text-centered
12
- p.title = number_with_delimiter @non_created_controller_actions.count
13
- p Controller actions to be created
14
8
  .column
15
- .card
16
- table.table.is-fullwidth
17
- thead
18
- tr
19
- th Controller
20
- th Action
21
- th
22
- tbody
23
- - if @non_created_controller_actions.blank?
24
- tr
25
- td.has-text-centered[colspan="3"] Up to date!
9
+ .content
10
+ .card
11
+ .card-content.has-text-centered
12
+ p.title.is-1 = number_with_delimiter @pending_controller_actions.count
13
+ p.subtitle Controller Actions to be created
14
+ - if @pending_controller_actions.blank?
15
+ p Everything's up to date
26
16
  - else
27
- - @non_created_controller_actions.each do |h|
28
- tr
29
- td = h[:controller]
30
- td = h[:action]
31
- td
17
+ .card-content
18
+ .buttons.is-centered
19
+ = authz_link_to 'Review', pending_controller_actions_path, { class: 'button is-primary' }, skip_scoping: true
20
+ .card-content
21
+ p If there are controller actions to be created this could mean that someone:
22
+ ul
23
+ li created new routes that need to be present in the system. You should create them!
24
+ li created routes that don't need to be in the system. Developers should clean them up.
25
+
26
+ .column
27
+ .content
28
+ .card
29
+ .card-content.has-text-centered
30
+ p.title.is-1 = number_with_delimiter @stale_controller_actions.count
31
+ p.subtitle Stale Controller Actions
32
+ - if @stale_controller_actions.blank?
33
+ p Everything's up to date
34
+ - else
35
+ .card-content
36
+ .buttons.is-centered
37
+ = authz_link_to 'Review', stale_controller_actions_path, { class: 'button is-primary' }, skip_scoping: true
38
+ .card-content
39
+ p Stale controller actions could mean someone:
40
+ ul
41
+ li removed them from your application's router by accident
42
+ li removed them from your applicaiton's router and need to be removed from the database as well
43
+
44
+
45
+
46
+
32
47
  section.section
33
48
  .container
34
- h2.title.is-4 Unused scopable keywords
49
+ h2.title Scoping
50
+ .content
51
+ h3.title.is-4 Suspicious keywords
52
+ .columns
53
+ .column
54
+ p.has-text-justified These are keywords that are present in your database but either have been removed from your source code at each scopable's configuration file or have been created progamatically skipping validations.
55
+ .column
56
+ p.has-text-justified No keywords should be present in these tables. If there are some, ask these questions to clean up:
57
+ ul
58
+ li Did someone remove scopable keywords?
59
+ li Did someone udpate records skipping validations?
35
60
  .columns
36
61
  - ::Authz::Scopables::Base.get_scopables_names.each do |scoping_module|
37
62
  .column
@@ -53,17 +78,22 @@ section.section
53
78
 
54
79
  section.section
55
80
  .container
56
- h2.title.is-4 Scopables not in codebase
81
+ h3.title.is-4 Scopable not in codebase
57
82
  .columns
58
- .column.is-one-quarter
59
- .card
60
- .card-content.has-text-centered
61
- p.title = @invalid_scoping_rules.count
62
- p Scopables removed from code but still present in the database
83
+ .column
84
+ .content
85
+ p.has-text-justified Developers may remove scopes in your codebase leaving stale rules in your database. To fix this you can:
86
+ ul
87
+ li Check with your developer to see if this is expected behaviour. The code that includes scopables in the system may have been accidentally deleted
88
+ li Remove all Scoping Rule instances in your database that are not present in code.
89
+
63
90
  .column
64
91
  .card
65
92
  table.table.is-fullwidth
66
93
  tbody
94
+ - if @invalid_scoping_rules.blank?
95
+ tr
96
+ td.has-text-centered All scopables in your database are correctly configured in your codebase
67
97
  - @invalid_scoping_rules.each do |rule_name|
68
98
  tr
69
99
  td = rule_name