20160805000001_add_permission.rb 9.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377
  1. class AddPermission < ActiveRecord::Migration
  2. def change
  3. # return if it's a new setup
  4. return if !Setting.find_by(name: 'system_init_done')
  5. create_table :permissions do |t|
  6. t.string :name, limit: 255, null: false
  7. t.string :note, limit: 500, null: true
  8. t.string :preferences, limit: 10_000, null: true
  9. t.timestamps limit: 3, null: false
  10. end
  11. add_index :permissions, [:name], unique: true
  12. create_table :permissions_roles, id: false do |t|
  13. t.belongs_to :role, index: true
  14. t.belongs_to :permission, index: true
  15. end
  16. Permission.create_or_update(
  17. name: 'admin',
  18. note: 'Admin Interface',
  19. preferences: {},
  20. )
  21. Permission.create_or_update(
  22. name: 'admin.user',
  23. note: 'Manage %s',
  24. preferences: {
  25. translations: ['Users']
  26. },
  27. )
  28. Permission.create_or_update(
  29. name: 'admin.group',
  30. note: 'Manage %s',
  31. preferences: {
  32. translations: ['Groups']
  33. },
  34. )
  35. Permission.create_or_update(
  36. name: 'admin.role',
  37. note: 'Manage %s',
  38. preferences: {
  39. translations: ['Roles']
  40. },
  41. )
  42. Permission.create_or_update(
  43. name: 'admin.organization',
  44. note: 'Manage %s',
  45. preferences: {
  46. translations: ['Organizations']
  47. },
  48. )
  49. Permission.create_or_update(
  50. name: 'admin.overview',
  51. note: 'Manage %s',
  52. preferences: {
  53. translations: ['Overviews']
  54. },
  55. )
  56. Permission.create_or_update(
  57. name: 'admin.text_module',
  58. note: 'Manage %s',
  59. preferences: {
  60. translations: ['Text Modules']
  61. },
  62. )
  63. Permission.create_or_update(
  64. name: 'admin.macro',
  65. note: 'Manage %s',
  66. preferences: {
  67. translations: ['Macros']
  68. },
  69. )
  70. Permission.create_or_update(
  71. name: 'admin.tag',
  72. note: 'Manage %s',
  73. preferences: {
  74. translations: ['Tags']
  75. },
  76. )
  77. Permission.create_or_update(
  78. name: 'admin.calendar',
  79. note: 'Manage %s',
  80. preferences: {
  81. translations: ['Calendar']
  82. },
  83. )
  84. Permission.create_or_update(
  85. name: 'admin.sla',
  86. note: 'Manage %s',
  87. preferences: {
  88. translations: ['SLA']
  89. },
  90. )
  91. Permission.create_or_update(
  92. name: 'admin.scheduler',
  93. note: 'Manage %s',
  94. preferences: {
  95. translations: ['Scheduler']
  96. },
  97. )
  98. Permission.create_or_update(
  99. name: 'admin.report_profile',
  100. note: 'Manage %s',
  101. preferences: {
  102. translations: ['Report Profiles']
  103. },
  104. )
  105. Permission.create_or_update(
  106. name: 'admin.channel_web',
  107. note: 'Manage %s',
  108. preferences: {
  109. translations: ['Channel - Web']
  110. },
  111. )
  112. Permission.create_or_update(
  113. name: 'admin.channel_formular',
  114. note: 'Manage %s',
  115. preferences: {
  116. translations: ['Channel - Formular']
  117. },
  118. )
  119. Permission.create_or_update(
  120. name: 'admin.channel_web',
  121. note: 'Manage %s',
  122. preferences: {
  123. translations: ['Channel - Web']
  124. },
  125. )
  126. Permission.create_or_update(
  127. name: 'admin.channel_email',
  128. note: 'Manage %s',
  129. preferences: {
  130. translations: ['Channel - Email']
  131. },
  132. )
  133. Permission.create_or_update(
  134. name: 'admin.channel_twitter',
  135. note: 'Manage %s',
  136. preferences: {
  137. translations: ['Channel - Twitter']
  138. },
  139. )
  140. Permission.create_or_update(
  141. name: 'admin.channel_facebook',
  142. note: 'Manage %s',
  143. preferences: {
  144. translations: ['Channel - Facebook']
  145. },
  146. )
  147. Permission.create_or_update(
  148. name: 'admin.channel_chat',
  149. note: 'Manage %s',
  150. preferences: {
  151. translations: ['Channel - Chat']
  152. },
  153. )
  154. Permission.create_or_update(
  155. name: 'admin.branding',
  156. note: 'Manage %s',
  157. preferences: {
  158. translations: ['Branding']
  159. },
  160. )
  161. Permission.create_or_update(
  162. name: 'admin.setting_system',
  163. note: 'Manage %s Settings',
  164. preferences: {
  165. translations: ['System']
  166. },
  167. )
  168. Permission.create_or_update(
  169. name: 'admin.security',
  170. note: 'Manage %s Settings',
  171. preferences: {
  172. translations: ['Security']
  173. },
  174. )
  175. Permission.create_or_update(
  176. name: 'admin.ticket',
  177. note: 'Manage %s Settings',
  178. preferences: {
  179. translations: ['Ticket']
  180. },
  181. )
  182. Permission.create_or_update(
  183. name: 'admin.package',
  184. note: 'Manage %s',
  185. preferences: {
  186. translations: ['Packages']
  187. },
  188. )
  189. Permission.create_or_update(
  190. name: 'admin.integration',
  191. note: 'Manage %s',
  192. preferences: {
  193. translations: ['Integrations']
  194. },
  195. )
  196. Permission.create_or_update(
  197. name: 'admin.api',
  198. note: 'Manage %s',
  199. preferences: {
  200. translations: ['API']
  201. },
  202. )
  203. Permission.create_or_update(
  204. name: 'admin.object',
  205. note: 'Manage %s',
  206. preferences: {
  207. translations: ['Objects']
  208. },
  209. )
  210. Permission.create_or_update(
  211. name: 'admin.translation',
  212. note: 'Manage %s',
  213. preferences: {
  214. translations: ['Translations']
  215. },
  216. )
  217. Permission.create_or_update(
  218. name: 'admin.maintenance',
  219. note: 'Manage %s',
  220. preferences: {
  221. translations: ['Maintenance']
  222. },
  223. )
  224. Permission.create_or_update(
  225. name: 'admin.session',
  226. note: 'Manage %s',
  227. preferences: {
  228. translations: ['Sessions']
  229. },
  230. )
  231. Permission.create_or_update(
  232. name: 'user_preferences',
  233. note: 'User Preferences',
  234. preferences: {},
  235. )
  236. Permission.create_or_update(
  237. name: 'user_preferences.password',
  238. note: 'Change %s',
  239. preferences: {
  240. translations: ['Password']
  241. },
  242. )
  243. Permission.create_or_update(
  244. name: 'user_preferences.notifications',
  245. note: 'Manage %s',
  246. preferences: {
  247. translations: ['Notifications'],
  248. required: ['ticket.agent'],
  249. },
  250. )
  251. Permission.create_or_update(
  252. name: 'user_preferences.access_token',
  253. note: 'Manage %s',
  254. preferences: {
  255. translations: ['Token Access']
  256. },
  257. )
  258. Permission.create_or_update(
  259. name: 'user_preferences.language',
  260. note: 'Change %s',
  261. preferences: {
  262. translations: ['Language']
  263. },
  264. )
  265. Permission.create_or_update(
  266. name: 'user_preferences.linked_accounts',
  267. note: 'Manage %s',
  268. preferences: {
  269. translations: ['Linked Accounts']
  270. },
  271. )
  272. Permission.create_or_update(
  273. name: 'user_preferences.device',
  274. note: 'Manage %s',
  275. preferences: {
  276. translations: ['Devices']
  277. },
  278. )
  279. Permission.create_or_update(
  280. name: 'user_preferences.avatar',
  281. note: 'Manage %s',
  282. preferences: {
  283. translations: ['Avatar']
  284. },
  285. )
  286. Permission.create_or_update(
  287. name: 'user_preferences.calendar',
  288. note: 'Access to %s',
  289. preferences: {
  290. translations: ['Calendars'],
  291. required: ['ticket.agent'],
  292. },
  293. )
  294. Permission.create_or_update(
  295. name: 'report',
  296. note: 'Report Interface',
  297. preferences: {},
  298. )
  299. Permission.create_or_update(
  300. name: 'ticket',
  301. note: 'Ticket Interface',
  302. preferences: {
  303. disabled: true
  304. },
  305. )
  306. Permission.create_or_update(
  307. name: 'ticket.agent',
  308. note: 'Access to Agent Tickets based on Group Access',
  309. preferences: {
  310. not: ['ticket.customer'],
  311. plugin: ['groups']
  312. },
  313. )
  314. Permission.create_or_update(
  315. name: 'ticket.customer',
  316. note: 'Access to Customer Tickets based on current_user and current_user.organization',
  317. preferences: {
  318. not: ['ticket.agent'],
  319. },
  320. )
  321. Permission.create_or_update(
  322. name: 'chat',
  323. note: 'Access to %s',
  324. preferences: {
  325. disabled: true,
  326. translations: ['Chat']
  327. },
  328. )
  329. Permission.create_or_update(
  330. name: 'chat.agent',
  331. note: 'Access to %s',
  332. preferences: {
  333. translations: ['Chat'],
  334. not: ['chat.customer'],
  335. },
  336. )
  337. Permission.create_or_update(
  338. name: 'cti',
  339. note: 'CTI',
  340. preferences: {
  341. disabled: true
  342. },
  343. )
  344. Permission.create_or_update(
  345. name: 'cti.agent',
  346. note: 'Access to %s',
  347. preferences: {
  348. translations: ['CTI'],
  349. not: ['cti.customer'],
  350. },
  351. )
  352. admin = Role.find_by(name: 'Admin')
  353. admin.permission_grand('user_preferences')
  354. admin.permission_grand('admin')
  355. admin.permission_grand('report')
  356. agent = Role.find_by(name: 'Agent')
  357. agent.permission_grand('user_preferences')
  358. agent.permission_grand('ticket.agent')
  359. agent.permission_grand('chat.agent')
  360. agent.permission_grand('cti.agent')
  361. customer = Role.find_by(name: 'Customer')
  362. customer.permission_grand('user_preferences.password')
  363. customer.permission_grand('user_preferences.language')
  364. customer.permission_grand('user_preferences.linked_accounts')
  365. customer.permission_grand('user_preferences.avatar')
  366. customer.permission_grand('ticket.customer')
  367. end
  368. end