bizside 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) hide show
  1. checksums.yaml +7 -0
  2. data/app/assets/images/jquery-treeTable/images/toggle-collapse-dark.png +0 -0
  3. data/app/assets/images/jquery-treeTable/images/toggle-collapse-light.png +0 -0
  4. data/app/assets/images/jquery-treeTable/images/toggle-expand-dark.png +0 -0
  5. data/app/assets/images/jquery-treeTable/images/toggle-expand-light.png +0 -0
  6. data/app/assets/javascripts/bizside.js +1 -0
  7. data/app/assets/javascripts/jquery-treeTable/jquery.treeTable.js +400 -0
  8. data/app/assets/stylesheets/bizside.css +3 -0
  9. data/app/assets/stylesheets/jquery-treeTable/jquery.treeTable.css.erb +55 -0
  10. data/lib/bizside/acl/access_control_utils.rb +36 -0
  11. data/lib/bizside/acl/available_helper.rb +65 -0
  12. data/lib/bizside/acl/controller_helper.rb +15 -0
  13. data/lib/bizside/acl.rb +6 -0
  14. data/lib/bizside/active_record_logger.rb +3 -0
  15. data/lib/bizside/audit/job_logger.rb +14 -0
  16. data/lib/bizside/audit/logger.rb +35 -0
  17. data/lib/bizside/audit_log.rb +158 -0
  18. data/lib/bizside/cache/entry.rb +112 -0
  19. data/lib/bizside/cache/file_store.rb +167 -0
  20. data/lib/bizside/cache/store.rb +237 -0
  21. data/lib/bizside/cache_util.rb +47 -0
  22. data/lib/bizside/cache_utils.rb +10 -0
  23. data/lib/bizside/carrierwave.rb +48 -0
  24. data/lib/bizside/config.rb +63 -0
  25. data/lib/bizside/configurations/mail.rb +37 -0
  26. data/lib/bizside/configurations/prefix.rb +25 -0
  27. data/lib/bizside/configurations/storage.rb +28 -0
  28. data/lib/bizside/coverage/launch.rb +25 -0
  29. data/lib/bizside/coverage/rcov_formatter.rb +13 -0
  30. data/lib/bizside/cron_validator.rb +62 -0
  31. data/lib/bizside/cucumber.rb +1 -0
  32. data/lib/bizside/engine.rb +4 -0
  33. data/lib/bizside/file_converter.rb +56 -0
  34. data/lib/bizside/file_uploader.rb +71 -0
  35. data/lib/bizside/gengou.rb +46 -0
  36. data/lib/bizside/gengou.yml +5 -0
  37. data/lib/bizside/hanaita_conf.rb +88 -0
  38. data/lib/bizside/implicit_ftps.rb +29 -0
  39. data/lib/bizside/itamae_conf.rb +186 -0
  40. data/lib/bizside/job_utils.rb +285 -0
  41. data/lib/bizside/log_analyzer.rb +122 -0
  42. data/lib/bizside/mailer.rb +56 -0
  43. data/lib/bizside/query_builder.rb +78 -0
  44. data/lib/bizside/railtie.rb +80 -0
  45. data/lib/bizside/record_has_warnings.rb +4 -0
  46. data/lib/bizside/resque.rb +141 -0
  47. data/lib/bizside/rsync.rb +40 -0
  48. data/lib/bizside/safe_pty.rb +17 -0
  49. data/lib/bizside/shib_utils.rb +18 -0
  50. data/lib/bizside/show_exceptions.rb +18 -0
  51. data/lib/bizside/sql_utils.rb +45 -0
  52. data/lib/bizside/string_io.rb +39 -0
  53. data/lib/bizside/string_utils.rb +157 -0
  54. data/lib/bizside/task_helper.rb +263 -0
  55. data/lib/bizside/tasks.rb +6 -0
  56. data/lib/bizside/test_help.rb +17 -0
  57. data/lib/bizside/uploader/content_type_validator.rb +39 -0
  58. data/lib/bizside/uploader/default_extensions.yml +15 -0
  59. data/lib/bizside/uploader/exif.rb +43 -0
  60. data/lib/bizside/uploader/extension_whitelist.rb +26 -0
  61. data/lib/bizside/uploader/filename_validator.rb +31 -0
  62. data/lib/bizside/user_agent/action_view/action_view_4.rb +56 -0
  63. data/lib/bizside/user_agent/action_view/use_variant.rb +4 -0
  64. data/lib/bizside/user_agent/action_view.rb +10 -0
  65. data/lib/bizside/user_agent/controller_helper.rb +51 -0
  66. data/lib/bizside/user_agent.rb +108 -0
  67. data/lib/bizside/validations.rb +8 -0
  68. data/lib/bizside/version.rb +3 -0
  69. data/lib/bizside/view_helper.rb +10 -0
  70. data/lib/bizside/warning.rb +24 -0
  71. data/lib/bizside/yes.rb +16 -0
  72. data/lib/bizside.rb +96 -0
  73. data/lib/cron_validator.rb +3 -0
  74. data/lib/gengou.rb +3 -0
  75. data/lib/job_utils.rb +3 -0
  76. data/lib/query_builder.rb +3 -0
  77. data/lib/record_has_warnings.rb +3 -0
  78. data/lib/sql_utils.rb +3 -0
  79. data/lib/string_utils.rb +3 -0
  80. data/lib/user_agent.rb +3 -0
  81. data/lib/yes.rb +3 -0
  82. data/rails/locales/ja.yml +12 -0
  83. data/validations/collection_presence_validator.rb +15 -0
  84. data/validations/email_validator.rb +1 -0
  85. data/validations/ip_address_validator.rb +22 -0
  86. data/validations/tel_validator.rb +28 -0
  87. data/validations/url_validator.rb +30 -0
  88. data/validations/zip_validator.rb +35 -0
  89. metadata +467 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9dcc6b0f9213ae2af553a733bccf759947c3815a9942c10c6942ad790920c4ec
4
+ data.tar.gz: 93a2466cbd7420b711fc9d2ca8a4d910bb2507054fc52b60a32b5268bb614349
5
+ SHA512:
6
+ metadata.gz: f8e2f4bd706c81e0a9029af91a19af46835843e44b5074809bda0f17331eb66284da30723a57e5133220d168db5ea07b49c874198d06bc077654021d94d92cd0
7
+ data.tar.gz: 31bfb0c73147bcf7246d8378cc6b426d834fc989bca781d684ce7016f586070aa45e0c3a4ea7b65592b5c0c268becfcd1a279d8f0afcb624a4612d542558f2c3
@@ -0,0 +1 @@
1
+ //= require_tree ./jquery-treeTable
@@ -0,0 +1,400 @@
1
+ /*
2
+ * jQuery treeTable Plugin VERSION
3
+ * http://ludo.cubicphuse.nl/jquery-plugins/treeTable/doc/
4
+ *
5
+ * Copyright 2011, Ludo van den Boom
6
+ * Dual licensed under the MIT or GPL Version 2 licenses.
7
+ */
8
+ (function($) {
9
+ // Helps to make options available to all functions
10
+ // TODO: This gives problems when there are both expandable and non-expandable
11
+ // trees on a page. The options shouldn't be global to all these instances!
12
+ var options;
13
+ var defaultPaddingLeft;
14
+ var persistStore;
15
+ var rootOfChildClass;//child-of-root-6形式。rootの直下を示すclass文字列
16
+
17
+ $.fn.treeTable = function(opts) {
18
+ options = $.extend({}, $.fn.treeTable.defaults, opts);
19
+
20
+ if(options.persist) {
21
+ persistStore = new Persist.Store(options.persistStoreName);
22
+ }
23
+
24
+ return this.each(function() {
25
+ $(this).addClass("treeTable").find("tbody tr").each(function() {
26
+ // Skip initialized nodes.
27
+ if (!$(this).hasClass('initialized')) {
28
+ var isRootNode = ($(this)[0].className.search(options.childPrefix) == -1);
29
+
30
+ if (isRootNode) {
31
+ $(this).addClass('trroot');
32
+ rootOfChildClass = options.childPrefix + $(this).attr("id");
33
+ }
34
+ // To optimize performance of indentation, I retrieve the padding-left
35
+ // value of the first root node. This way I only have to call +css+
36
+ // once.
37
+ if (isRootNode && isNaN(defaultPaddingLeft)) {
38
+ defaultPaddingLeft = parseInt($($(this).children("td")[options.treeColumn]).css('padding-left'), 10);
39
+ }
40
+
41
+ // Set child nodes to initial state if we're in expandable mode.
42
+ if(!isRootNode && options.expandable && options.initialState == "collapsed") {
43
+ $(this).addClass('ui-helper-hidden');
44
+ }
45
+
46
+ // If we're not in expandable mode, initialize all nodes.
47
+ // If we're in expandable mode, only initialize root nodes.
48
+ if(!options.expandable || isRootNode || options.lazyLoad) {
49
+ initialize($(this));
50
+ }
51
+ }
52
+ });
53
+ });
54
+ };
55
+
56
+ $.fn.treeTable.defaults = {
57
+ childPrefix: "child-of-",
58
+ clickableNodeNames: false,
59
+ expandable: true,
60
+ indent: 19,
61
+ childRight: 0,
62
+ initialState: "collapsed",
63
+ onNodeShow: null,
64
+ onNodeHide: null,
65
+ treeColumn: 0,
66
+ persist: false,
67
+ persistStoreName: 'treeTable',
68
+ stringExpand: "Expand",
69
+ stringCollapse: "Collapse",
70
+ leafIconPath: "",
71
+ lazyLoad: false,
72
+ onNodeLoad: null
73
+ };
74
+
75
+ //Expand all nodes
76
+ $.fn.expandAll = function() {
77
+ $(this).find("tr").each(function() {
78
+ $(this).expand();
79
+ });
80
+ };
81
+
82
+ //Collapse all nodes
83
+ $.fn.collapseAll = function() {
84
+ $(this).find("tr").each(function() {
85
+ $(this).collapse();
86
+ });
87
+ };
88
+
89
+ // Recursively hide all node's children in a tree
90
+ $.fn.collapse = function() {
91
+ return this.each(function() {
92
+ $(this).removeClass("expanded").addClass("collapsed");
93
+
94
+ if (options.persist) {
95
+ persistNodeState($(this));
96
+ }
97
+
98
+ childrenOf($(this)).each(function() {
99
+ if(!$(this).hasClass("collapsed")) {
100
+ $(this).collapse();
101
+ }
102
+
103
+ $(this).addClass('ui-helper-hidden');
104
+
105
+ if($.isFunction(options.onNodeHide)) {
106
+ options.onNodeHide.call(this);
107
+ }
108
+
109
+ });
110
+ });
111
+ };
112
+
113
+ // Recursively show all node's children in a tree
114
+ $.fn.expand = function() {
115
+ return this.each(function() {
116
+ $(this).removeClass("collapsed").addClass("expanded");
117
+
118
+ if (options.persist) {
119
+ persistNodeState($(this));
120
+ }
121
+
122
+ childrenOf($(this)).each(function() {
123
+ initialize($(this));
124
+
125
+ if($(this).is(".expanded.parent")) {
126
+ $(this).expand();
127
+ }
128
+
129
+ $(this).removeClass('ui-helper-hidden');
130
+
131
+ if($.isFunction(options.onNodeShow)) {
132
+ options.onNodeShow.call(this);
133
+ }
134
+ });
135
+ });
136
+ };
137
+
138
+ // 現在の設定を一つ取得
139
+ $.fn.getoption = function(key) {
140
+ return options[key];
141
+ };
142
+
143
+ // Reveal a node by expanding all ancestors
144
+ $.fn.reveal = function() {
145
+ $(ancestorsOf($(this)).reverse()).each(function() {
146
+ initialize($(this));
147
+ $(this).expand().show();
148
+ });
149
+
150
+ return this;
151
+ };
152
+
153
+ // Add an entire branch to +destination+
154
+ $.fn.appendBranchTo = function(destination) {
155
+ var node = $(this);
156
+ var parent = parentOf(node);
157
+
158
+ var ancestorNames = $.map(ancestorsOf($(destination)), function(a) { return a.id; });
159
+
160
+ // Conditions:
161
+ // 1: +node+ should not be inserted in a location in a branch if this would
162
+ // result in +node+ being an ancestor of itself.
163
+ // 2: +node+ should not have a parent OR the destination should not be the
164
+ // same as +node+'s current parent (this last condition prevents +node+
165
+ // from being moved to the same location where it already is).
166
+ // 3: +node+ should not be inserted as a child of +node+ itself.
167
+ if($.inArray(node[0].id, ancestorNames) == -1 && (!parent || (destination.id != parent[0].id)) && destination.id != node[0].id) {
168
+ indent(node, ancestorsOf(node).length * options.indent * -1); // Remove indentation
169
+
170
+ if(parent) { node.removeClass(options.childPrefix + parent[0].id); }
171
+
172
+ node.addClass(options.childPrefix + destination.id);
173
+ move(node, destination); // Recursively move nodes to new location
174
+ indent(node, ancestorsOf(node).length * options.indent);
175
+ }
176
+
177
+ return this;
178
+ };
179
+
180
+ // Add reverse() function from JS Arrays
181
+ $.fn.reverse = function() {
182
+ return this.pushStack(this.get().reverse(), arguments);
183
+ };
184
+
185
+ // Toggle an entire branch
186
+ $.fn.toggleBranch = function() {
187
+ if($(this).hasClass("collapsed")) {
188
+ if (options.lazyLoad && !$(this).hasClass('loaded')) {
189
+ if($.isFunction(options.onNodeLoad)) {
190
+ options.onNodeLoad.call(this, $(this));
191
+ }
192
+ }
193
+ $(this).expand();
194
+ } else {
195
+ $(this).collapse();
196
+ }
197
+
198
+ return this;
199
+ };
200
+
201
+ // Private関数だったmoveを無理やりpublicにしたもの。set要素は無いです。
202
+ $.fn.setmove = function(node, destination) {
203
+ return move(node, destination);
204
+ };
205
+
206
+ //子の有無を抜きにして矢印を設定
207
+ //treetableプラグインは▼矢印がつくかどうかを子があるかどうかで判断しており、
208
+ //Explorerのようなフォルダとファイルの区別がない。
209
+ //それでは困るため、ここで指定したnodeは子の有無にかかわらず▼矢印をつける。
210
+ $.fn.setNodeArrow = function(node) {
211
+ var childNodes = childrenOf(node);
212
+
213
+ if(!node.hasClass("parent")) {
214
+ node.addClass("parent");
215
+ }
216
+
217
+ if(node.hasClass("parent")) {
218
+ var cell = $(node.children("td")[options.treeColumn]);
219
+ var padding = getPaddingLeft(cell) + options.indent;
220
+
221
+ childNodes.each(function() {
222
+ if($(this).hasClass(rootOfChildClass)){
223
+ }else{
224
+ padding = padding - options.childRight;
225
+ }
226
+ $(this).children("td")[options.treeColumn].style.paddingLeft = (padding + options.childRight) + "px";
227
+ });
228
+
229
+ if(options.expandable) {
230
+ var newLink = '<a href="#" title="' + options.stringExpand + '" style="margin-left: ' + (-1)*(options.indent) + 'px; padding-left: ' + options.indent + 'px" class="expander"></a>';
231
+
232
+ cell.find('a[title="' + options.stringExpand + '"]').remove();
233
+
234
+ if(options.clickableNodeNames) {
235
+ cell.wrapInner(newLink);
236
+ } else {
237
+ cell.html(newLink+cell.html());
238
+ }
239
+
240
+ $(cell[0].firstChild).click(function() { node.toggleBranch(); return false; }).mousedown(function() { return false; });
241
+ $(cell[0].firstChild).keydown(function(e) { if(e.keyCode == 13) { node.toggleBranch(); return false; }});
242
+
243
+ if(options.clickableNodeNames) {
244
+ cell[0].style.cursor = "pointer";
245
+ $(cell).click(function(e) {
246
+ // Don't double-toggle if the click is on the existing expander icon
247
+ if (e.target.className != 'expander') {
248
+ node.toggleBranch();
249
+ }
250
+ });
251
+ }
252
+
253
+ if (options.persist && getPersistedNodeState(node)) {
254
+ node.addClass('expanded');
255
+ }
256
+
257
+ // Check for a class set explicitly by the user, otherwise set the default class
258
+ if(!(node.hasClass("expanded") || node.hasClass("collapsed"))) {
259
+ node.addClass(options.initialState);
260
+ }
261
+
262
+ if(node.hasClass("expanded")) {
263
+ node.expand();
264
+ }
265
+ }
266
+ }
267
+ return this;
268
+ };
269
+
270
+ // === Private functions
271
+
272
+ function ancestorsOf(node) {
273
+ var ancestors = [];
274
+ while(node = parentOf(node)) {
275
+ ancestors[ancestors.length] = node[0];
276
+ }
277
+ return ancestors;
278
+ };
279
+
280
+ function childrenOf(node) {
281
+ return $(node).siblings("tr." + options.childPrefix + node[0].id);
282
+ };
283
+
284
+ function getPaddingLeft(node) {
285
+ var paddingLeft = parseInt(node[0].style.paddingLeft, 10);
286
+ return (isNaN(paddingLeft)) ? defaultPaddingLeft : paddingLeft;
287
+ }
288
+
289
+ function indent(node, value) {
290
+ var cell = $(node.children("td")[options.treeColumn]);
291
+ cell[0].style.paddingLeft = getPaddingLeft(cell) + value + "px";
292
+
293
+ childrenOf(node).each(function() {
294
+ indent($(this), value);
295
+ });
296
+ };
297
+
298
+ function initialize(node) {
299
+ if(!node.hasClass("initialized")) {
300
+ node.addClass("initialized");
301
+
302
+ var childNodes = childrenOf(node);
303
+
304
+ if(!node.hasClass("parent") && (childNodes.length > 0 || options.lazyLoad)) {
305
+ node.addClass("parent");
306
+ }
307
+
308
+ if(node.hasClass("parent")) {
309
+ var cell = $(node.children("td")[options.treeColumn]);
310
+ var padding = getPaddingLeft(cell) + options.indent;
311
+
312
+ childNodes.each(function() {
313
+ if($(this).hasClass(rootOfChildClass)){
314
+ }else{
315
+ padding = padding - options.childRight;
316
+ }
317
+ $(this).children("td")[options.treeColumn].style.paddingLeft = (padding + options.childRight) + "px";
318
+ });
319
+
320
+ if(options.expandable) {
321
+ var newLink = '<a href="#" title="' + options.stringExpand + '" style="margin-left: ' + (-1)*(options.indent) + 'px; padding-left: ' + options.indent + 'px" class="expander"></a>';
322
+
323
+ if(options.clickableNodeNames) {
324
+ cell.wrapInner(newLink);
325
+ } else {
326
+ cell.html(newLink+cell.html());
327
+ }
328
+
329
+ $(cell[0].firstChild).click(function() { node.toggleBranch(); return false; }).mousedown(function() { return false; });
330
+ $(cell[0].firstChild).keydown(function(e) { if(e.keyCode == 13) { node.toggleBranch(); return false; }});
331
+
332
+ if(options.clickableNodeNames) {
333
+ cell[0].style.cursor = "pointer";
334
+ $(cell).click(function(e) {
335
+ // Don't double-toggle if the click is on the existing expander icon
336
+ if (e.target.className != 'expander') {
337
+ node.toggleBranch();
338
+ }
339
+ });
340
+ }
341
+
342
+ if (options.persist && getPersistedNodeState(node)) {
343
+ node.addClass('expanded');
344
+ }
345
+
346
+ // Check for a class set explicitly by the user, otherwise set the default class
347
+ if(!(node.hasClass("expanded") || node.hasClass("collapsed"))) {
348
+ node.addClass(options.initialState);
349
+ }
350
+
351
+ if(node.hasClass("expanded")) {
352
+ node.expand();
353
+ }
354
+ }
355
+ }
356
+ }
357
+ };
358
+
359
+ function move(node, destination) {
360
+ node.insertAfter(destination);
361
+ childrenOf(node).reverse().each(function() { move($(this), node[0]); });
362
+ };
363
+
364
+ function parentOf(node) {
365
+ var classNames = node[0].className.split(' ');
366
+
367
+ for(var key=0; key<classNames.length; key++) {
368
+ if(classNames[key].match(options.childPrefix)) {
369
+ return $(node).siblings("#" + classNames[key].substring(options.childPrefix.length));
370
+ }
371
+ }
372
+
373
+ return null;
374
+ };
375
+
376
+ //saving state functions, not critical, so will not generate alerts on error
377
+ function persistNodeState(node) {
378
+ if(node.hasClass('expanded')) {
379
+ try {
380
+ persistStore.set(node.attr('id'), '1');
381
+ } catch (err) {
382
+
383
+ }
384
+ } else {
385
+ try {
386
+ persistStore.remove(node.attr('id'));
387
+ } catch (err) {
388
+
389
+ }
390
+ }
391
+ }
392
+
393
+ function getPersistedNodeState(node) {
394
+ try {
395
+ return persistStore.get(node.attr('id')) == '1';
396
+ } catch (err) {
397
+ return false;
398
+ }
399
+ }
400
+ })(jQuery);
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require_tree ./jquery-treeTable
3
+ */
@@ -0,0 +1,55 @@
1
+ /* jQuery treeTable stylesheet
2
+ *
3
+ * This file contains styles that are used to display the tree table. Each tree
4
+ * table is assigned the +treeTable+ class.
5
+ * ========================================================================= */
6
+
7
+ /* jquery.treeTable.collapsible
8
+ * ------------------------------------------------------------------------- */
9
+ .treeTable tr td .expander {
10
+ cursor: pointer;
11
+ padding: 0;
12
+ zoom: 1; /* IE7 Hack */
13
+ }
14
+
15
+ .treeTable tr td a.expander {
16
+ background-position: left center;
17
+ background-repeat: no-repeat;
18
+ color: #000;
19
+ text-decoration: none;
20
+ }
21
+
22
+ .treeTable tr.collapsed td a.expander {
23
+ background-image: url(<%= asset_path 'jquery-treeTable/images/toggle-expand-dark.png' %>);
24
+ }
25
+
26
+ .treeTable tr.expanded td a.expander {
27
+ background-image: url(<%= asset_path 'jquery-treeTable/images/toggle-collapse-dark.png' %>);
28
+ }
29
+
30
+ /* jquery.treeTable.sortable
31
+ * ------------------------------------------------------------------------- */
32
+ .treeTable tr.selected, .treeTable tr.accept {
33
+ background-color: #3875d7;
34
+ }
35
+
36
+ .treeTable tr.selected a.expander, .treeTable tr.accept a.expander {
37
+ color: #fff;
38
+ }
39
+
40
+ .treeTable tr.collapsed.selected td a.expander, .treeTable tr.collapsed.accept td a.expander {
41
+ background-image: url(<%= asset_path 'jquery-treeTable/images/toggle-expand-light.png' %>);
42
+ }
43
+
44
+ .treeTable tr.expanded.selected td a.expander, .treeTable tr.expanded.accept td a.expander {
45
+ background-image: url(<%= asset_path 'jquery-treeTable/images/toggle-collapse-light.png' %>);
46
+ }
47
+
48
+ .treeTable .ui-draggable-dragging {
49
+ color: #000;
50
+ z-index: 1;
51
+ }
52
+
53
+ /* Layout helper taken from jQuery UI. This way I don't have to require the
54
+ * full jQuery UI CSS to be loaded. */
55
+ .ui-helper-hidden { display: none; }
@@ -0,0 +1,36 @@
1
+ # アクセス制御のユーティリティクラス
2
+ class Bizside::Acl::AccessControlUtils
3
+
4
+ @@access_control = nil
5
+
6
+ def self.init(reload = false)
7
+ if reload or @@access_control.nil?
8
+ @@access_control = {}
9
+ config_files = Bizside.config.acl.config_files? ? Bizside.config.acl.config_files : ['config/acl.yml']
10
+ config_files.each do |config|
11
+ merge(config)
12
+ end
13
+ end
14
+ end
15
+
16
+ def self.merge(filename)
17
+ yml = YAML.load_file(filename)
18
+
19
+ yml.each do |roll_key, values|
20
+ @@access_control[roll_key] ||= {}
21
+ @@access_control[roll_key].merge!(values)
22
+ end
23
+ end
24
+
25
+ def self.role_keys
26
+ # Railsを使用 かつ 開発環境の場合はリロードする
27
+ init(Bizside.rails_env&.development?)
28
+
29
+ @@access_control.keys.sort
30
+ end
31
+
32
+ def self.get_access_control(roll_key)
33
+ @@access_control[roll_key]
34
+ end
35
+
36
+ end
@@ -0,0 +1,65 @@
1
+ require_relative 'access_control_utils'
2
+
3
+ module Bizside::Acl::AvailableHelper
4
+
5
+ def available_for(controller_name, action_name = nil, params = {})
6
+ controller_name = controller_name[1..-1] if controller_name.start_with?('/')
7
+ action_name ||= 'index'
8
+ message = "ACL: #{controller_name}##{action_name} => "
9
+
10
+ Bizside::Acl::AccessControlUtils::role_keys.each do |role_key|
11
+ access_control = Bizside::Acl::AccessControlUtils::get_access_control(role_key)
12
+
13
+ # コントローラの定義を取得
14
+ controller_value = access_control[controller_name]
15
+ next unless controller_value.present?
16
+
17
+ # アクションの定義を取得
18
+ if controller_value.is_a?(String)
19
+ action_value = controller_value
20
+ elsif controller_value.is_a?(Array)
21
+ action_value = controller_value
22
+ elsif controller_value.is_a?(TrueClass)
23
+ action_value = true
24
+ elsif controller_value.is_a?(FalseClass)
25
+ action_value = false
26
+ else
27
+ action_value = controller_value[action_name]
28
+ action_value = controller_value['index'] if action_value.nil?
29
+ if action_value.is_a?(Hash)
30
+ action_value = controller_value[action_value['same_as']] if action_value['same_as'].present?
31
+ end
32
+ end
33
+
34
+ next if action_value.nil?
35
+
36
+ # アクセス定義を確認
37
+ role = eval(role_key)
38
+ if role
39
+ if action_value.is_a?(String)
40
+ ret = role.instance_eval(action_value)
41
+ elsif action_value.is_a?(Array)
42
+ action_value.each do |judge|
43
+ ret = role.instance_eval(judge)
44
+ break unless ret
45
+ end
46
+ elsif action_value.is_a?(FalseClass)
47
+ ret = false
48
+ else
49
+ ret = true
50
+ end
51
+ else
52
+ ret = false
53
+ end
54
+
55
+ unless ret
56
+ Bizside.logger.debug message + 'false'
57
+ return false
58
+ end
59
+
60
+ end
61
+
62
+ Bizside.logger.debug message + 'true'
63
+ true
64
+ end
65
+ end
@@ -0,0 +1,15 @@
1
+ module Bizside
2
+ module Acl
3
+ module ControllerHelper
4
+ include Bizside::Acl::AvailableHelper
5
+
6
+ def authorize_user!
7
+ unless available_for(params[:controller], params[:action], params)
8
+ redirect_to root_path
9
+ return
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,6 @@
1
+ module Bizside
2
+ module Acl
3
+ require_relative 'acl/available_helper'
4
+ require_relative 'acl/controller_helper'
5
+ end
6
+ end
@@ -0,0 +1,3 @@
1
+ if Rails.env.development?
2
+ ActiveRecord::Base.logger = nil
3
+ end
@@ -0,0 +1,14 @@
1
+ require_relative 'logger'
2
+
3
+ module Bizside
4
+ module Audit
5
+ class JobLogger < self::Logger
6
+
7
+ # override
8
+ # @see Bizside::Audit::Logger#file_path
9
+ def file_path
10
+ File.join('log', 'job_audit.log')
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,35 @@
1
+ require 'singleton'
2
+ require 'logger'
3
+ require 'ltsv'
4
+
5
+ module Bizside
6
+ module Audit
7
+ class Logger
8
+ include Singleton
9
+
10
+ def self.logger
11
+ self.instance
12
+ end
13
+
14
+ def initialize
15
+ path = file_path
16
+ FileUtils.mkdir_p( File.dirname(path) )
17
+ file = File.open(path, 'a')
18
+ file.sync = true
19
+
20
+ @logger = ::Logger.new(file)
21
+ @logger.formatter = proc do |severity, datetime, progname, msg|
22
+ "#{msg}\n"
23
+ end
24
+ end
25
+
26
+ def record(info = {})
27
+ @logger.info LTSV.dump(info)
28
+ end
29
+
30
+ def file_path
31
+ File.join('log', 'audit.log')
32
+ end
33
+ end
34
+ end
35
+ end