cm-admin 0.6.1 → 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/helpers/cm_admin/application_helper.rb +6 -0
- data/app/views/cm_admin/main/_table.html.slim +1 -1
- data/app/views/cm_admin/main/_top_navbar.html.slim +2 -2
- data/lib/cm_admin/model.rb +1 -19
- data/lib/cm_admin/models/action.rb +2 -4
- data/lib/cm_admin/models/controller_method.rb +4 -2
- data/lib/cm_admin/models/dsl_method.rb +10 -13
- data/lib/cm_admin/version.rb +1 -1
- data/lib/generators/cm_admin/install_generator.rb +1 -0
- data/lib/generators/cm_admin/policy_generator.rb +13 -0
- data/{app/policies → lib/generators/cm_admin/templates}/application_policy.rb +2 -2
- data/lib/generators/cm_admin/templates/policy.rb +8 -0
- data/tmp/cache/webpacker/last-compilation-digest-development +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb9d2bfcdbec704c6259f45f51e317e32ad05d5ca4990a52fca17af831f62566
|
4
|
+
data.tar.gz: 6a357cfe4458e4da3409c8e95e51cda3e36d6d8ebbd00c4518a6928f1815926e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 242b5d01155399a9c9038b1a0811db95c82824ace0c9e4b592c98d9dae5a51b23cf28a80cb89db771f0d647685b5b5b9c83e0ac6774269eb0c88d4c90c792c83
|
7
|
+
data.tar.gz: 17cd6516e61f6e3ff3aa6fc7515807c3a5fb423d0fa016992aba51bbe2b2f40b885aa6e200c8aefa71b713dd2477fcb3bbb7f63e0ba7de96ca6e2351ae058356
|
@@ -7,5 +7,11 @@ module CmAdmin
|
|
7
7
|
def current_webpacker_instance
|
8
8
|
CmAdmin.webpacker
|
9
9
|
end
|
10
|
+
|
11
|
+
# Allow if policy is not defined.
|
12
|
+
def has_valid_policy(model_name, action_name)
|
13
|
+
return true unless policy([:cm_admin, model_name.classify.constantize]).methods.include?(:"#{action_name}?")
|
14
|
+
policy([:cm_admin, model_name.classify.constantize]).send(:"#{action_name}?")
|
15
|
+
end
|
10
16
|
end
|
11
17
|
end
|
@@ -47,7 +47,7 @@
|
|
47
47
|
= link_to "#{page_url('edit', ar_object)}" do
|
48
48
|
.popup-option Edit
|
49
49
|
- custom_actions.each do |custom_action|
|
50
|
-
- if custom_action.name.present? &&
|
50
|
+
- if custom_action.name.present? && has_valid_policy(@model.name, custom_action.name)
|
51
51
|
- if custom_action.display_if.call(ar_object)
|
52
52
|
= link_to custom_action.path.gsub(':id', ar_object.id.to_s), method: custom_action.verb do
|
53
53
|
.popup-option = custom_action.name.titleize
|
@@ -24,14 +24,14 @@
|
|
24
24
|
- if new_action.any? && policy([:cm_admin, @model.name.classify.constantize]).new?
|
25
25
|
= link_to 'Add', "#{page_url('new')}", class: 'primary-btn ml-2'
|
26
26
|
- @model.available_actions.select{|act| act if act.route_type == 'collection'}.each do |custom_action|
|
27
|
-
- if custom_action.name.present? &&
|
27
|
+
- if custom_action.name.present? && has_valid_policy(@model.name, custom_action.name)
|
28
28
|
- if custom_action.display_type == :button
|
29
29
|
= link_to custom_action.name.titleize, @model.ar_model.table_name + '/' + custom_action.path, class: 'primary-btn ml-2', method: custom_action.verb
|
30
30
|
- elsif custom_action.display_type == :modal
|
31
31
|
= link_to custom_action.name.titleize, '', class: 'primary-btn ml-2', data: { bs_toggle: "modal", bs_target: "##{custom_action.name.classify}Modal" }
|
32
32
|
- elsif @model.current_action.name == 'show'
|
33
33
|
- @model.available_actions.select{|act| act if act.route_type == 'member'}.each do |custom_action|
|
34
|
-
- if custom_action.name.present? &&
|
34
|
+
- if custom_action.name.present? && has_valid_policy(@model.name, custom_action.name)
|
35
35
|
- if custom_action.display_type == :button && custom_action.display_if.call(@ar_object)
|
36
36
|
= link_to custom_action.name.titleize, custom_action.path.gsub(':id', params[:id]), class: 'primary-btn ml-2', method: custom_action.verb
|
37
37
|
- elsif custom_action.display_type == :modal && custom_action.display_if.call(@ar_object)
|
data/lib/cm_admin/model.rb
CHANGED
@@ -45,7 +45,6 @@ module CmAdmin
|
|
45
45
|
actions unless @actions_set
|
46
46
|
$available_actions = @available_actions.dup
|
47
47
|
self.class.all_actions.push(@available_actions)
|
48
|
-
define_policy
|
49
48
|
define_controller
|
50
49
|
end
|
51
50
|
|
@@ -101,23 +100,6 @@ module CmAdmin
|
|
101
100
|
|
102
101
|
private
|
103
102
|
|
104
|
-
def define_policy
|
105
|
-
klass = Class.new(ApplicationPolicy) do
|
106
|
-
def initialize(user, record)
|
107
|
-
@user = user
|
108
|
-
@record = record
|
109
|
-
end
|
110
|
-
|
111
|
-
$available_actions.each do |action|
|
112
|
-
define_method :"#{action.name}?" do
|
113
|
-
accessible_by = action.accessible_by.map { |role| "user.#{role}" }.join(' || ')
|
114
|
-
eval(accessible_by)
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
CmAdmin.const_set "#{@name}Policy", klass
|
119
|
-
end
|
120
|
-
|
121
103
|
# Controller defined for each model
|
122
104
|
# If model is User, controller will be UsersController
|
123
105
|
def define_controller
|
@@ -135,7 +117,7 @@ module CmAdmin
|
|
135
117
|
@model.current_action = @action
|
136
118
|
@ar_object = @model.try(@action.parent || action_name, params)
|
137
119
|
@ar_object, @associated_model, @associated_ar_object = @model.custom_controller_action(action_name, params.permit!) if !@ar_object.present? && params[:id].present?
|
138
|
-
authorize controller_name.classify.constantize, policy_class: "CmAdmin::#{controller_name.classify}Policy".constantize
|
120
|
+
authorize controller_name.classify.constantize, policy_class: "CmAdmin::#{controller_name.classify}Policy".constantize if defined? "CmAdmin::#{controller_name.classify}Policy".constantize
|
139
121
|
aar_model = request.url.split('/')[-2].classify.constantize if params[:aar_id]
|
140
122
|
@associated_ar_object = aar_model.find(params[:aar_id]) if params[:aar_id]
|
141
123
|
nested_tables = @model.available_fields[:new].except(:fields).keys
|
@@ -6,7 +6,7 @@ module CmAdmin
|
|
6
6
|
include Actions::Blocks
|
7
7
|
attr_accessor :name, :verb, :layout_type, :layout, :partial, :path, :page_title, :page_description,
|
8
8
|
:child_records, :is_nested_field, :nested_table_name, :parent, :display_if, :route_type, :code_block,
|
9
|
-
:display_type, :action_type, :redirection_url, :sort_direction, :sort_column
|
9
|
+
:display_type, :action_type, :redirection_url, :sort_direction, :sort_column
|
10
10
|
|
11
11
|
VALID_SORT_DIRECTION = Set[:asc, :desc].freeze
|
12
12
|
|
@@ -34,14 +34,12 @@ module CmAdmin
|
|
34
34
|
self.action_type = :default
|
35
35
|
self.sort_column = :created_at
|
36
36
|
self.sort_direction = :desc
|
37
|
-
self.accessible_by = CmAdmin.authorized_roles
|
38
37
|
end
|
39
38
|
|
40
|
-
def set_values(page_title, page_description, partial
|
39
|
+
def set_values(page_title, page_description, partial)
|
41
40
|
self.page_title = page_title
|
42
41
|
self.page_description = page_description
|
43
42
|
self.partial = partial
|
44
|
-
self.accessible_by = (CmAdmin.authorized_roles.dup << accessible_by).flatten.compact.uniq if accessible_by
|
45
43
|
end
|
46
44
|
|
47
45
|
class << self
|
@@ -5,7 +5,8 @@ module CmAdmin
|
|
5
5
|
|
6
6
|
def show(params)
|
7
7
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'show')
|
8
|
-
|
8
|
+
scoped_model = "CmAdmin::#{self.name}Policy::Scope".constantize.new(Current.user, self.name.constantize).resolve
|
9
|
+
@ar_object = scoped_model.find(params[:id])
|
9
10
|
end
|
10
11
|
|
11
12
|
def index(params)
|
@@ -40,7 +41,8 @@ module CmAdmin
|
|
40
41
|
sort_column = "created_at"
|
41
42
|
sort_direction = %w[asc desc].include?(sort_params[:sort_direction]) ? sort_params[:sort_direction] : "asc"
|
42
43
|
sort_params = {sort_column: sort_column, sort_direction: sort_direction}
|
43
|
-
|
44
|
+
|
45
|
+
records = "CmAdmin::#{self.name}Policy::Scope".constantize.new(Current.user, self.name.constantize).resolve if records.nil?
|
44
46
|
records = records.order("#{current_action.sort_column} #{current_action.sort_direction}")
|
45
47
|
|
46
48
|
final_data = CmAdmin::Models::Filter.filtered_data(filter_params, records, @filters)
|
@@ -10,28 +10,28 @@ module CmAdmin
|
|
10
10
|
# @current_action = CmAdmin::Models::CustomAction.find_by(self, name: name)
|
11
11
|
end
|
12
12
|
|
13
|
-
def cm_index(page_title: nil, page_description: nil, partial: nil,
|
13
|
+
def cm_index(page_title: nil, page_description: nil, partial: nil, &block)
|
14
14
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'index')
|
15
|
-
@current_action.set_values(page_title, page_description, partial
|
15
|
+
@current_action.set_values(page_title, page_description, partial)
|
16
16
|
yield
|
17
17
|
# action.instance_eval(&block)
|
18
18
|
end
|
19
19
|
|
20
|
-
def cm_show(page_title: nil, page_description: nil, partial: nil,
|
20
|
+
def cm_show(page_title: nil, page_description: nil, partial: nil, &block)
|
21
21
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'show')
|
22
|
-
@current_action.set_values(page_title, page_description, partial
|
22
|
+
@current_action.set_values(page_title, page_description, partial)
|
23
23
|
yield
|
24
24
|
end
|
25
25
|
|
26
|
-
def cm_edit(page_title: nil,page_description: nil, partial: nil,
|
26
|
+
def cm_edit(page_title: nil,page_description: nil, partial: nil, &block)
|
27
27
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'edit')
|
28
|
-
@current_action.set_values(page_title, page_description, partial
|
28
|
+
@current_action.set_values(page_title, page_description, partial)
|
29
29
|
yield
|
30
30
|
end
|
31
31
|
|
32
|
-
def cm_new(page_title: nil,page_description: nil, partial: nil,
|
32
|
+
def cm_new(page_title: nil,page_description: nil, partial: nil, &block)
|
33
33
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'new')
|
34
|
-
@current_action.set_values(page_title, page_description, partial
|
34
|
+
@current_action.set_values(page_title, page_description, partial)
|
35
35
|
yield
|
36
36
|
end
|
37
37
|
|
@@ -47,16 +47,14 @@ module CmAdmin
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
def tab(tab_name, custom_action, associated_model: nil, layout_type: nil, layout: nil, partial: nil,
|
50
|
+
def tab(tab_name, custom_action, associated_model: nil, layout_type: nil, layout: nil, partial: nil, &block)
|
51
51
|
if custom_action.to_s == ''
|
52
52
|
@current_action = CmAdmin::Models::Action.find_by(self, name: 'show')
|
53
|
-
@current_action.accessible_by = (CmAdmin.authorized_roles.dup << accessible_by).flatten.compact.uniq if accessible_by
|
54
53
|
@available_tabs << CmAdmin::Models::Tab.new(tab_name, '', &block)
|
55
54
|
else
|
56
55
|
action = CmAdmin::Models::Action.new(name: custom_action.to_s, verb: :get, path: ':id/'+custom_action,
|
57
56
|
layout_type: layout_type, layout: layout, partial: partial, child_records: associated_model,
|
58
57
|
action_type: :custom, display_type: :page)
|
59
|
-
action.accessible_by = (CmAdmin.authorized_roles.dup << accessible_by).flatten.compact.uniq if accessible_by
|
60
58
|
@available_actions << action
|
61
59
|
@current_action = action
|
62
60
|
@available_tabs << CmAdmin::Models::Tab.new(tab_name, custom_action, &block)
|
@@ -117,12 +115,11 @@ module CmAdmin
|
|
117
115
|
# end
|
118
116
|
# end
|
119
117
|
# end
|
120
|
-
def custom_action(name: nil, verb: nil, layout: nil, layout_type: nil, partial: nil, path: nil, display_type: nil, display_if: lambda { |arg| return true }, route_type: nil,
|
118
|
+
def custom_action(name: nil, verb: nil, layout: nil, layout_type: nil, partial: nil, path: nil, display_type: nil, display_if: lambda { |arg| return true }, route_type: nil, &block)
|
121
119
|
action = CmAdmin::Models::CustomAction.new(
|
122
120
|
name: name, verb: verb, layout: layout, layout_type: layout_type, partial: partial, path: path,
|
123
121
|
parent: self.current_action.name, display_type: display_type, display_if: display_if,
|
124
122
|
action_type: :custom, route_type: route_type, &block)
|
125
|
-
action.accessible_by = (CmAdmin.authorized_roles.dup << accessible_by).flatten.compact.uniq if accessible_by
|
126
123
|
@available_actions << action
|
127
124
|
# self.class.class_eval(&block)
|
128
125
|
end
|
data/lib/cm_admin/version.rb
CHANGED
@@ -9,6 +9,7 @@ module CmAdmin
|
|
9
9
|
copy_file 'cm_admin_initializer.rb', 'config/initializers/cm_admin.rb'
|
10
10
|
copy_file 'custom.js', 'app/assets/javascripts/custom.js'
|
11
11
|
copy_file 'custom.css', 'app/assets/stylesheets/custom.css'
|
12
|
+
copy_file 'application_policy.rb', 'app/policies/application_policy.rb'
|
12
13
|
route 'mount CmAdmin::Engine => "/admin"'
|
13
14
|
end
|
14
15
|
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'rails/generators'
|
2
|
+
|
3
|
+
module CmAdmin
|
4
|
+
module Generators
|
5
|
+
class PolicyGenerator < Rails::Generators::NamedBase
|
6
|
+
source_root File.expand_path('templates', __dir__)
|
7
|
+
|
8
|
+
def copy_policy_files
|
9
|
+
template "policy.rb", "app/policies/cm_admin/#{file_name}_policy.rb"
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -17,7 +17,7 @@ class ApplicationPolicy
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def create?
|
20
|
-
|
20
|
+
true
|
21
21
|
end
|
22
22
|
|
23
23
|
def new?
|
@@ -43,7 +43,7 @@ class ApplicationPolicy
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def resolve
|
46
|
-
|
46
|
+
scope.all
|
47
47
|
end
|
48
48
|
|
49
49
|
private
|
@@ -0,0 +1,8 @@
|
|
1
|
+
class CmAdmin::<%= class_name %>Policy < ApplicationPolicy
|
2
|
+
<%- available_action_names = (CmAdmin::Model.find_by({name: class_name}).available_actions.map{|action| action.name}.uniq - ['custom_action', 'new', 'edit']) %>
|
3
|
+
<%- available_action_names.each do |action_name| %>
|
4
|
+
def <%= action_name %>?
|
5
|
+
<%= CmAdmin.authorized_roles.map {|role| "@user.#{role}" }.join(' && ') %>
|
6
|
+
end
|
7
|
+
<% end %>
|
8
|
+
end
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
07d558738c316293586496817b2bccbf6430b5bd
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cm-admin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- sajinmp
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date: 2022-
|
13
|
+
date: 2022-04-01 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: pagy
|
@@ -152,7 +152,6 @@ files:
|
|
152
152
|
- app/javascript/packs/cm_admin/quick_search.js
|
153
153
|
- app/javascript/packs/cm_admin/scaffolds.js
|
154
154
|
- app/javascript/stylesheets/cm_admin/application.scss
|
155
|
-
- app/policies/application_policy.rb
|
156
155
|
- app/views/cm_admin/main/_associated_table.html.slim
|
157
156
|
- app/views/cm_admin/main/_cm_pagy_nav.html.slim
|
158
157
|
- app/views/cm_admin/main/_drawer.html.slim
|
@@ -222,9 +221,12 @@ files:
|
|
222
221
|
- lib/cm_admin/view_helpers/navigation_helper.rb
|
223
222
|
- lib/cm_admin/view_helpers/page_info_helper.rb
|
224
223
|
- lib/generators/cm_admin/install_generator.rb
|
224
|
+
- lib/generators/cm_admin/policy_generator.rb
|
225
|
+
- lib/generators/cm_admin/templates/application_policy.rb
|
225
226
|
- lib/generators/cm_admin/templates/cm_admin_initializer.rb
|
226
227
|
- lib/generators/cm_admin/templates/custom.css
|
227
228
|
- lib/generators/cm_admin/templates/custom.js
|
229
|
+
- lib/generators/cm_admin/templates/policy.rb
|
228
230
|
- lib/tasks/webpack_install.rake
|
229
231
|
- package.json
|
230
232
|
- postcss.config.js
|