cm-admin 0.6.1 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|