caboose-cms 0.3.88 → 0.3.89

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NDYzZDI2Zjg4NDFlYTA1MWYwYjUyYTgzZjhkM2FjZWU4YzM1ZGJhNA==
4
+ ZmYwNzdhZTIzMjlhMzhjMzg0MGZlNTMwODk2M2RkNjc1NDg3MTM4Nw==
5
5
  data.tar.gz: !binary |-
6
- NGU1MWQ2ZmQxZmQxYzA0MTRmN2M3Nzc5NjhkNmZjOTkwNzY1YjllMw==
6
+ MzZmMTAxMWUyZjA2YWVmNGE5MTNlYTEyMzI0NjJhOTdjNmFlMmYxZQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- MWIyYmZiNmY3MDczYzEwYzE0MDU1NDViMmFlNWUyNWJkMDU2Yjk1MDY5MmNh
10
- ZGQ5MzNiZjdkMmJlYzc4ZGFiOGI4YjVkNTViZTdlMzlkMWZmMDc2ZjE2MzMx
11
- YzEzOTNmZTg3ZWY2NjE2MWNhODlhZDI4NDU2OGUyN2I2ZWEzMTM=
9
+ Zjk2ZTY3MTFjYmRkZTM4MTg2N2Q3YTk0NWFlY2FjYWY4YWZjMGQ3MzRkMDM5
10
+ NzdiZWM3YjJlYWY4OGFkMTk5MTFiMDM0ZDY4ZWM0NDIxOWEwY2YzM2NjOTIx
11
+ OTQ2ZjIxYmJmN2U5M2NlZjYzYzcyYjRmZWViODRmN2VmZGQ5MWY=
12
12
  data.tar.gz: !binary |-
13
- N2Y5MGJkODU0YzQ4YTExYTgzMjdhYmJkYWJhNmI4MzgyN2MxMjQ3YjAxN2Qw
14
- ZjlkZTEwYmQ5MWIzOGMxZTI3NzJjNWIxM2Y4YjY0NDcyZWQyNDc4MzNhZmNk
15
- ODE5Y2ZlNTg4OGVmMDQxODg0NjYzYTY3ZmQ1NWRjZmRkNWM3N2E=
13
+ MTY3NGU0M2U2Yzc4MDc3YTkzMjk2YjY3ZjdkNDE0Y2FlODJiZWQ3MzgxYjFi
14
+ NDk0M2U5ZTA1YzczMjdiNzhkYThjZDUwNzhlZmFiMjg1NTQ3ZmFkMWY1N2Fh
15
+ OTk4MTJkNzAwZDc0MDhkOGFjZjNhMWQ4NzhiNWQzNGMxM2M5Yzg=
@@ -95,6 +95,22 @@ module Caboose
95
95
  render json: { 'redirect' => '/admin/roles' }
96
96
  end
97
97
 
98
+ # POST /admin/roles/:id/permissions/:permission_id
99
+ def add_permission
100
+ return if !user_is_allowed('roles', 'edit')
101
+ if !RolePermission.where(:role_id => params[:id], :permission_id => params[:permission_id], ).exists?
102
+ RolePermission.create(:role_id => params[:id], :permission_id => params[:permission_id])
103
+ end
104
+ render :json => true
105
+ end
106
+
107
+ # DELETE /admin/roles/:id/permissions/:permission_id
108
+ def remove_permission
109
+ return if !user_is_allowed('roles', 'edit')
110
+ RolePermission.where(:role_id => params[:id], :permission_id => params[:permission_id]).destroy_all
111
+ render :json => true
112
+ end
113
+
98
114
  # GET /admin/roles/options
99
115
  def options
100
116
  return unless user_is_allowed('roles', 'view')
@@ -270,6 +270,22 @@ module Caboose
270
270
  render :json => resp
271
271
  end
272
272
 
273
+ # POST /admin/users/:id/roles/:role_id
274
+ def add_to_role
275
+ return if !user_is_allowed('users', 'edit')
276
+ if !RoleMembership.where(:user_id => params[:id], :role_id => params[:role_id]).exists?
277
+ RoleMembership.create(:user_id => params[:id], :role_id => params[:role_id])
278
+ end
279
+ render :json => true
280
+ end
281
+
282
+ # DELETE /admin/users/:id/roles/:role_id
283
+ def remove_from_role
284
+ return if !user_is_allowed('users', 'edit')
285
+ RoleMembership.where(:user_id => params[:id], :role_id => params[:role_id]).destroy_all
286
+ render :json => true
287
+ end
288
+
273
289
  # GET /admin/users/options
274
290
  def options
275
291
  return if !user_is_allowed('users', 'view')
@@ -3,10 +3,41 @@
3
3
  <div id="role_<%= @role.id %>_name"></div>
4
4
  <div id="role_<%= @role.id %>_parent_id"></div>
5
5
  <div id="role_<%= @role.id %>_description"></div>
6
+ <h3>Members</h3>
7
+ <div id='members'>
8
+ <table class='data'>
9
+ <% Caboose::User.reorder("last_name, first_name").all.each do |u| %>
10
+ <% is_member = Caboose::RoleMembership.where(:role_id => @role.id, :user_id => u.id).exists? %>
11
+ <tr>
12
+ <td><input type='checkbox' name='user<%= u.id %>' <%= raw is_member ? "checked='true'" : '' %> onclick="toggle_role(<%= u.id %>, <%= @role.id %>, $(this).prop('checked'));" /></td>
13
+ <td><%= u.first_name %> <%= u.last_name %> (<%= u.email %>)</td>
14
+ </tr>
15
+ <% end %>
16
+ </table>
17
+ </div>
18
+ <h3>Permissions</h3>
19
+ <div id='permissions'>
20
+ <table class='data'>
21
+ <% Caboose::Permission.reorder("resource, action").all.each do |p| %>
22
+ <% has_permission = Caboose::RolePermission.where(:role_id => @role.id, :permission_id => p.id).exists? %>
23
+ <tr>
24
+ <td><input type='checkbox' name='perm<%= p.id %>' <%= raw has_permission ? "checked='true'" : '' %> onclick="toggle_permission(<%= p.id %>, <%= @role.id %>, $(this).prop('checked'));" /></td>
25
+ <td><%= p.resource %> - <%= p.action %></td>
26
+ </tr>
27
+ <% end %>
28
+ </table>
29
+ </div>
6
30
  <div id="role_<%= @role.id %>_members"></div>
7
31
  <div id="role_<%= @role.id %>_permissions"></div>
8
32
  <div id="message"></div>
9
33
 
34
+ <% content_for :caboose_css do %>
35
+ <style type='text/css'>
36
+ #content input[type=checkbox] { position: relative; }
37
+ #members { height: 400px; overflow-y: scroll; margin-bottom: 20px; }
38
+ #permissions { height: 400px; overflow-y: scroll; margin-bottom: 20px; }
39
+ </style>
40
+ <% end %>
10
41
  <% content_for :caboose_js do %>
11
42
  <%= javascript_include_tag "caboose/model/all" %>
12
43
  <script type="text/javascript">
@@ -25,84 +56,31 @@ $(document).ready(function() {
25
56
  delete_url: 'delete /admin/roles/<%= @role.id %>',
26
57
  authenticity_token: '<%= form_authenticity_token %>',
27
58
  attributes: [
28
- {
29
- name: 'parent_id',
30
- nice_name: 'Parent',
31
- type: 'select',
32
- value: <%= @role.parent_id %>,
33
- text: "<%= @role.parent.nil? ? '[No parent]' : @role.parent.name %>",
34
- show_controls: true,
35
- loading_message: 'Getting roles...',
36
- options_url: '/admin/roles/options',
37
- width: 590,
38
- message: 'message'
39
- },
59
+ { name: 'parent_id' , nice_name: 'Parent' , type: 'select', value: <%= @role.parent_id %>, text: "<%= @role.parent.nil? ? '[No parent]' : @role.parent.name %>", show_controls: true, loading_message: 'Getting roles...', options_url: '/admin/roles/options', width: 590, message: 'message' },
40
60
  { name: 'name' , nice_name: 'Name' , type: 'text' , value: "<%= @role.name %>" , width: 590 , message: 'message' },
41
- { name: 'description' , nice_name: 'Description' , type: 'text' , value: "<%= @role.description %>" , width: 590 , message: 'message' },
42
- {
43
- name: 'members',
44
- nice_name: 'Members',
45
- type: 'checkbox-multiple',
46
- value: <%= @role.users.collect{|u| u.id}.to_json %>,
47
- text: "<%= raw @role.users.order('last_name, first_name').collect{|u| "#{u.first_name} #{u.last_name}"}.join('<br />') %>",
48
- loading_message: 'Getting users...',
49
- options_url: '/admin/users/options',
50
- width: 590,
51
- message: 'message'
52
- },
53
- {
54
- name: 'permissions',
55
- nice_name: 'Permissions',
56
- type: 'checkbox-multiple',
57
- value: <%= @role.permissions.collect{|p| p.id}.to_json %>,
58
- text: "<%= raw @role.permissions.order('resource, action').collect{|p| "#{p.resource}_#{p.action}"}.join('<br />') %>",
59
- loading_message: 'Getting permissions...',
60
- options_url: '/admin/permissions/options',
61
- width: 590,
62
- message: 'message'
63
- }
61
+ { name: 'description' , nice_name: 'Description' , type: 'text' , value: "<%= @role.description %>" , width: 590 , message: 'message' }
64
62
  ],
65
63
  on_load: function() { modal.autosize(); }
64
+ });
65
+ });
66
+
67
+ function toggle_role(user_id, role_id, checked)
68
+ {
69
+ $.ajax({
70
+ url: '/admin/users/' + user_id +'/roles/' + role_id,
71
+ type: checked ? 'post' : 'delete',
72
+ success: function(resp) { }
66
73
  });
74
+ }
67
75
 
68
- /*var user = new Model({
69
- name: 'Role',
70
- id: <%= @role.id %>,
71
- listing_url: 'get /admin/roles',
72
- update_url: 'put /admin/roles/<%= @role.id %>',
73
- delete_url: 'delete /admin/roles/<%= @role.id %>',
74
- attributes: [
75
- {
76
- name: 'parent_id',
77
- nice_name: 'Parent',
78
- type: 'select',
79
- value: <%= @role.parent_id %>,
80
- text: "<%= @role.parent.nil? ? '[No parent]' : @role.parent.name %>",
81
- show_controls: true,
82
- loading_message: 'Getting roles...',
83
- options_url: '/admin/roles/options'
84
- },
85
- { name: 'name' , type: 'text' , value: "<%= @role.name %>" },
86
- { name: 'description' , type: 'text' , value: "<%= @role.description %>" },
87
- {
88
- name: 'members',
89
- type: 'checkbox-multiple',
90
- value: <%= @role.users.collect{|u| u.id}.to_json %>,
91
- text: "<%= raw @role.users.order('last_name, first_name').collect{|u| "#{u.first_name} #{u.last_name}"}.join('<br />') %>",
92
- loading_message: 'Getting users...',
93
- options_url: '/admin/users/options',
94
- },
95
- {
96
- name: 'permissions',
97
- type: 'checkbox-multiple',
98
- value: <%= @role.permissions.collect{|p| p.id}.to_json %>,
99
- text: "<%= raw @role.permissions.order('resource, action').collect{|p| "#{p.resource}_#{p.action}"}.join('<br />') %>",
100
- loading_message: 'Getting permissions...',
101
- options_url: '/admin/permissions/options',
102
- }
103
- ]
104
- });*/
105
- });
76
+ function toggle_permission(permission_id, role_id, checked)
77
+ {
78
+ $.ajax({
79
+ url: '/admin/roles/' + role_id +'/permissions/' + permission_id,
80
+ type: checked ? 'post' : 'delete',
81
+ success: function(resp) { }
82
+ });
83
+ }
106
84
 
107
85
  </script>
108
86
  <% end %>
@@ -8,6 +8,14 @@ pic = "http://gravatar.com/avatar/#{gravatar_id}.png?s=150" #&d=/assets/caboose/
8
8
  <p><div id='user_<%= @edituser.id %>_last_name' ></div></p>
9
9
  <p><div id='user_<%= @edituser.id %>_username' ></div></p>
10
10
  <p><div id='user_<%= @edituser.id %>_email' ></div></p>
11
+ <div id='roles'>
12
+ <table class='data'>
13
+ <% Caboose::Role.flat_tree.each do |r| %>
14
+ <% is_member = Caboose::RoleMembership.where(:role_id => r.id, :user_id => @edituser.id).exists? %>
15
+ <tr><td><input type='checkbox' name='role<%= r.id %>' <%= is_member ? "checked='true'" : '' %> onclick="toggle_role(<%= @edituser.id %>, <%= r.id %>, $(this).prop('checked'));" /></td><td><%= r.name %></td></tr>
16
+ <% end %>
17
+ </table>
18
+ </div>
11
19
  <div id='message'></div>
12
20
  <div id='controls'>
13
21
  <input type='button' value='Back' onclick="window.location='/admin/users';" />
@@ -15,6 +23,12 @@ pic = "http://gravatar.com/avatar/#{gravatar_id}.png?s=150" #&d=/assets/caboose/
15
23
  <input type='button' value='Delete User' onclick="delete_user(<%= @edituser.id %>);" />
16
24
  </div>
17
25
 
26
+ <% content_for :caboose_css do %>
27
+ <style type='text/css'>
28
+ #content input[type=checkbox] { position: relative; }
29
+ #roles { height: 200px; overflow-y: scroll; margin-bottom: 20px; }
30
+ </style>
31
+ <% end %>
18
32
  <% content_for :caboose_js do %>
19
33
  <%= javascript_include_tag "caboose/model/all" %>
20
34
  <script type="text/javascript">
@@ -61,6 +75,15 @@ function delete_user(user_id, confirm)
61
75
  });
62
76
  }
63
77
 
78
+ function toggle_role(user_id, role_id, checked)
79
+ {
80
+ $.ajax({
81
+ url: '/admin/users/' + user_id +'/roles/' + role_id,
82
+ type: checked ? 'post' : 'delete',
83
+ succes: function(resp) { }
84
+ });
85
+ }
86
+
64
87
  </script>
65
88
  <% end %>
66
89
 
@@ -33,6 +33,9 @@ Caboose::Engine.routes.draw do
33
33
  post "admin/users" => "users#create"
34
34
  delete "admin/users/:id" => "users#destroy"
35
35
 
36
+ post "admin/users/:id/roles/:role_id" => "users#add_to_role"
37
+ delete "admin/users/:id/roles/:role_id" => "users#remove_from_role"
38
+
36
39
  get "admin/roles" => "roles#index"
37
40
  get "admin/roles/options" => "roles#options"
38
41
  get "admin/roles/new" => "roles#new"
@@ -41,6 +44,9 @@ Caboose::Engine.routes.draw do
41
44
  post "admin/roles" => "roles#create"
42
45
  delete "admin/roles/:id" => "roles#destroy"
43
46
 
47
+ post "admin/roles/:id/permissions/:permission_id" => "roles#add_permission"
48
+ delete "admin/roles/:id/permissions/:permission_id" => "roles#remove_permission"
49
+
44
50
  get "admin/permissions" => "permissions#index"
45
51
  get "admin/permissions/options" => "permissions#options"
46
52
  get "admin/permissions/new" => "permissions#new"
@@ -1,3 +1,3 @@
1
1
  module Caboose
2
- VERSION = '0.3.88'
2
+ VERSION = '0.3.89'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: caboose-cms
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.88
4
+ version: 0.3.89
5
5
  platform: ruby
6
6
  authors:
7
7
  - William Barry
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-04-04 00:00:00.000000000 Z
11
+ date: 2014-04-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails