esp-permissions 0.0.3 → 0.0.4
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.
- data/app/assets/images/esp_permissions/inline_error_arrow.png +0 -0
- data/app/assets/javascripts/esp_permissions/application.js +1 -0
- data/app/assets/javascripts/esp_permissions/permissions.js +37 -0
- data/app/assets/stylesheets/esp_permissions/jquery_ui.sass +1493 -0
- data/app/assets/stylesheets/esp_permissions/permissions.sass +13 -1
- data/app/controllers/esp_permissions/permissions_controller.rb +23 -8
- data/app/controllers/esp_permissions/users_controller.rb +7 -2
- data/app/views/esp_permissions/permissions/new.html.erb +12 -7
- data/app/views/esp_permissions/users/index.html.erb +12 -8
- data/config/locales/ru.yml +3 -0
- data/config/routes.rb +6 -1
- data/lib/esp-permissions/version.rb +1 -1
- data/lib/generators/esp_permissions/install/install_generator.rb +9 -5
- data/lib/generators/esp_permissions/install/templates/app/models/context.rb +18 -0
- data/lib/generators/esp_permissions/install/templates/app/models/permission.rb +39 -0
- data/lib/generators/esp_permissions/install/templates/app/models/user.rb +12 -6
- data/lib/generators/esp_permissions/install/templates/db/migrate/esp_permissions_create_contexts.rb +14 -0
- data/lib/tasks/esp-permissions_tasks.rake +17 -4
- metadata +174 -37
@@ -41,6 +41,11 @@ body
|
|
41
41
|
padding: 25px 30px
|
42
42
|
width: 960px
|
43
43
|
|
44
|
+
.new_permission
|
45
|
+
display: block
|
46
|
+
margin: 0 0 15px 0
|
47
|
+
text-align: right
|
48
|
+
|
44
49
|
.logged_info
|
45
50
|
border-bottom: 1px solid #A17345
|
46
51
|
margin: 0 0 15px
|
@@ -100,7 +105,7 @@ body
|
|
100
105
|
|
101
106
|
.formtastic
|
102
107
|
.inline-errors
|
103
|
-
background: transparent image_url("inline_error_arrow.png") no-repeat left center
|
108
|
+
background: transparent image_url("esp_permissions/inline_error_arrow.png") no-repeat left center
|
104
109
|
font-size: 12px
|
105
110
|
color: #933
|
106
111
|
padding: 0 0 0 18px
|
@@ -119,6 +124,13 @@ body
|
|
119
124
|
padding: 2px 3px
|
120
125
|
width: 954px
|
121
126
|
|
127
|
+
input
|
128
|
+
font-size: 14px
|
129
|
+
height: 20px
|
130
|
+
padding: 3px 4px
|
131
|
+
width: 868px
|
132
|
+
|
133
|
+
|
122
134
|
.button-group
|
123
135
|
margin: 15px 0
|
124
136
|
|
@@ -1,13 +1,28 @@
|
|
1
1
|
class EspPermissions::PermissionsController < EspPermissions::ApplicationController
|
2
|
-
belongs_to :user, :
|
3
|
-
actions :new, :create, :destroy
|
2
|
+
belongs_to :user, :optional => true
|
4
3
|
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
def create
|
5
|
+
unless params[:user_id] && @user = User.find(params[:user_id])
|
6
|
+
@user = User.find_or_initialize_by_uid(params[:permission][:user_uid]).tap do |user|
|
7
|
+
user.update_attributes :first_name => params[:permission][:user_first_name],
|
8
|
+
:last_name => params[:permission][:user_last_name],
|
9
|
+
:email => params[:permission][:user_email]
|
10
|
+
end
|
11
|
+
end
|
8
12
|
|
9
|
-
|
10
|
-
#destroy!{ [:manage, :permissions, :users] }
|
11
|
-
#end
|
13
|
+
@permission = Permission.new(params[:permission].merge(:user_id => @user.id))
|
12
14
|
|
15
|
+
if @permission.save
|
16
|
+
redirect_to esp_permissions.users_path
|
17
|
+
else
|
18
|
+
unless params[:user_id]
|
19
|
+
@user = nil
|
20
|
+
@permission.user_id = nil if params[:permission][:user_search].blank?
|
21
|
+
end
|
22
|
+
|
23
|
+
@permission.valid?
|
24
|
+
|
25
|
+
render :new
|
26
|
+
end
|
27
|
+
end
|
13
28
|
end
|
@@ -1,10 +1,15 @@
|
|
1
1
|
class EspPermissions::UsersController < EspPermissions::ApplicationController
|
2
2
|
has_searcher
|
3
|
-
|
3
|
+
|
4
|
+
actions :index, :new, :create, :destroy, :search
|
5
|
+
|
4
6
|
has_scope :page, :default => 1
|
5
7
|
|
6
|
-
|
8
|
+
def search
|
9
|
+
render :json => JSON.parse(Curl::Easy.http_get("#{Settings['sso.url']}/users.json?user_search[keywords]=#{URI.escape(params[:term])}").body_str) and return
|
10
|
+
end
|
7
11
|
|
12
|
+
protected
|
8
13
|
def collection
|
9
14
|
get_collection_ivar || set_collection_ivar(search_and_paginate_collection)
|
10
15
|
end
|
@@ -1,13 +1,18 @@
|
|
1
1
|
<h3>
|
2
|
-
<%= t('permissions.You are adding role to') %>
|
3
|
-
<span>
|
4
|
-
<%= @user.name %>
|
5
|
-
<<%= mail_to @user.email, @user.email %>>
|
6
|
-
</span>
|
2
|
+
<%= "#{t('permissions.You are adding role to')} #{@user.full_name if @user}" %>
|
7
3
|
</h3>
|
8
|
-
|
4
|
+
|
5
|
+
<%= semantic_form_for resource,
|
6
|
+
:url => (@user ? esp_permissions.user_permissions_path(@user) : esp_permissions.permissions_path) do |form| %>
|
9
7
|
<%= form.inputs do %>
|
10
|
-
<%= form.input :
|
8
|
+
<%= form.input :user_uid, :as => :hidden %>
|
9
|
+
<%= form.input :user_first_name, :as => :hidden %>
|
10
|
+
<%= form.input :user_last_name, :as => :hidden %>
|
11
|
+
<%= form.input :user_email, :as => :hidden %>
|
12
|
+
<%= form.input :user_search, :as => :string unless @user %>
|
13
|
+
<%= form.input :context, :collection => current_user.available_contexts,
|
14
|
+
:member_label => ->(c) { (' ' * 2 * c.depth + c.title).html_safe },
|
15
|
+
:include_blank => t('permissions.not_selected') %>
|
11
16
|
<%= form.input :role, :as => :select, :collection => Permission.human_enums[:role].invert, :include_blank => t('permissions.not_selected') %>
|
12
17
|
<% end %>
|
13
18
|
<%= form.buttons :class => 'button-group' do %>
|
@@ -6,14 +6,18 @@
|
|
6
6
|
<li><%= button_tag t('permissions.search'), :class => 'button icon search' %></li>
|
7
7
|
<% end %>
|
8
8
|
<% end %>
|
9
|
-
|
10
|
-
|
9
|
+
|
10
|
+
<%= link_to "+#{t('permissions.create_permission')}".html_safe,
|
11
|
+
esp_permissions.new_permission_path,
|
12
|
+
:class => 'new_permission' if can?(:modify, Permission)%>
|
13
|
+
|
14
|
+
<ul class='collection_list'>
|
15
|
+
<% collection.each do |user| %>
|
11
16
|
<li>
|
12
|
-
<div class=
|
13
|
-
<%= user.
|
17
|
+
<div class="name">
|
18
|
+
<%= user.full_name %>
|
14
19
|
</div>
|
15
|
-
|
16
|
-
<div class='email'>
|
20
|
+
<div class="email">
|
17
21
|
<<%= mail_to user.email, user.email %>>
|
18
22
|
</div>
|
19
23
|
|
@@ -34,7 +38,7 @@
|
|
34
38
|
<%= link_to t('permissions.delete'),
|
35
39
|
esp_permissions.permission_path(permission),
|
36
40
|
:method => :delete,
|
37
|
-
:confirm => t('Are you sure?'),
|
41
|
+
:confirm => t('permissions.Are you sure?'),
|
38
42
|
:class => 'buttton icon remove danger' if can?(:destroy, permission) %>
|
39
43
|
</li>
|
40
44
|
<% end %>
|
@@ -45,9 +49,9 @@
|
|
45
49
|
<li>Нет прав доступа</li>
|
46
50
|
<% end %>
|
47
51
|
<% end %>
|
52
|
+
|
48
53
|
</li>
|
49
54
|
<% end %>
|
50
55
|
</ul>
|
51
56
|
|
52
|
-
|
53
57
|
<%= paginate collection %>
|
data/config/locales/ru.yml
CHANGED
@@ -4,6 +4,7 @@ ru:
|
|
4
4
|
permission:
|
5
5
|
context: Категория
|
6
6
|
role: Роль
|
7
|
+
user_search: Пользователь
|
7
8
|
|
8
9
|
models:
|
9
10
|
permission: Право доступа
|
@@ -14,6 +15,7 @@ ru:
|
|
14
15
|
last: Последняя страница
|
15
16
|
previous: "←"
|
16
17
|
first: Первая страница
|
18
|
+
truncate: ...
|
17
19
|
|
18
20
|
permissions:
|
19
21
|
'Are you sure?': Вы уверены, в том что хотите удалить запись?
|
@@ -22,6 +24,7 @@ ru:
|
|
22
24
|
back_to_manage: Назад в раздел управления контентом
|
23
25
|
cancel: Отмена
|
24
26
|
create: Создать
|
27
|
+
create_permission: Создать право доступа
|
25
28
|
delete: Удалить
|
26
29
|
new: Добавить право доступа
|
27
30
|
not_selected: -- не выбрано --
|
data/config/routes.rb
CHANGED
@@ -1,6 +1,11 @@
|
|
1
1
|
EspPermissions::Engine.routes.draw do
|
2
|
+
resources :permissions, :only => [:new, :create, :destroy]
|
3
|
+
|
2
4
|
resources :users, :only => :index do
|
3
|
-
resources :permissions, :only => [:new, :create, :destroy]
|
5
|
+
resources :permissions, :only => [:new, :create, :destroy]
|
4
6
|
end
|
7
|
+
|
8
|
+
match '/users/search' => "users#search"
|
9
|
+
|
5
10
|
root :to => 'users#index'
|
6
11
|
end
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'rails/generators'
|
2
1
|
require 'rails/generators/migration'
|
3
2
|
|
4
3
|
module EspPermissions
|
@@ -9,16 +8,21 @@ module EspPermissions
|
|
9
8
|
source_root File.expand_path('../templates', __FILE__)
|
10
9
|
|
11
10
|
def self.next_migration_number(dirname)
|
12
|
-
Time.now.strftime('%Y%m%d%H%M%S')
|
11
|
+
@number ||= Time.now.strftime('%Y%m%d%H%M%S').to_i
|
12
|
+
@number += 1
|
13
13
|
end
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
def create_models
|
16
|
+
template 'app/models/context.rb'
|
17
|
+
template 'app/models/permission.rb'
|
18
|
+
template 'app/models/user.rb'
|
19
|
+
end
|
18
20
|
|
19
21
|
def create_migration
|
22
|
+
migration_template 'db/migrate/esp_permissions_create_contexts.rb'
|
20
23
|
migration_template 'db/migrate/esp_permissions_create_permissions.rb'
|
21
24
|
end
|
25
|
+
|
22
26
|
end
|
23
27
|
end
|
24
28
|
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
class Context < ActiveRecord::Base
|
2
|
+
|
3
|
+
default_scope order('weight')
|
4
|
+
|
5
|
+
attr_accessible :id, :title, :ancestry, :weight
|
6
|
+
|
7
|
+
has_many :permissions
|
8
|
+
has_many :users, :through => :permissions
|
9
|
+
|
10
|
+
alias_attribute :to_s, :title
|
11
|
+
|
12
|
+
has_ancestry
|
13
|
+
|
14
|
+
searchable do
|
15
|
+
text :title
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class Permission < ActiveRecord::Base
|
2
|
+
belongs_to :context
|
3
|
+
belongs_to :user
|
4
|
+
has_enum :role, :scopes => true
|
5
|
+
|
6
|
+
attr_accessor :user_search, :user_uid, :user_first_name, :user_last_name, :user_email
|
7
|
+
|
8
|
+
before_validation :reset_user_id, :unless => :user_id?
|
9
|
+
|
10
|
+
validates_presence_of :role, :user
|
11
|
+
|
12
|
+
private
|
13
|
+
def reset_user_id
|
14
|
+
self.user_id = nil
|
15
|
+
clear_attr_accessors
|
16
|
+
self.errors[:user_search] = ::I18n.t('activerecord.errors.models.permission.attributes.user_id.blank')
|
17
|
+
end
|
18
|
+
|
19
|
+
def clear_attr_accessors
|
20
|
+
self.user_uid = nil
|
21
|
+
self.user_first_name = nil
|
22
|
+
self.user_last_name = nil
|
23
|
+
self.user_email = nil
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# == Schema Information
|
28
|
+
#
|
29
|
+
# Table name: permissions
|
30
|
+
#
|
31
|
+
# id :integer not null, primary key
|
32
|
+
# context_id :integer
|
33
|
+
# context_type :string(255)
|
34
|
+
# user_id :integer
|
35
|
+
# role :string(255)
|
36
|
+
# created_at :datetime
|
37
|
+
# updated_at :datetime
|
38
|
+
#
|
39
|
+
|
@@ -1,12 +1,10 @@
|
|
1
1
|
class User < ActiveRecord::Base
|
2
2
|
devise :omniauthable, :trackable, :timeoutable
|
3
|
-
attr_accessible :name, :email, :nickname, :first_name, :last_name, :location, :description, :image, :phone, :urls, :raw_info
|
3
|
+
attr_accessible :name, :email, :nickname, :first_name, :last_name, :location, :description, :image, :phone, :urls, :raw_info, :uid
|
4
|
+
validates_presence_of :uid
|
4
5
|
|
5
6
|
has_many :permissions
|
6
|
-
|
7
|
-
searchable do
|
8
|
-
text :name, :email, :nickname, :phone
|
9
|
-
end
|
7
|
+
has_many :contexts, :through => :permissions
|
10
8
|
|
11
9
|
def self.from_omniauth(hash)
|
12
10
|
User.find_or_initialize_by_uid(hash['uid']).tap do |user|
|
@@ -14,8 +12,16 @@ class User < ActiveRecord::Base
|
|
14
12
|
end
|
15
13
|
end
|
16
14
|
|
15
|
+
def full_name
|
16
|
+
nickname || name || "#{last_name} #{first_name}"
|
17
|
+
end
|
18
|
+
|
19
|
+
searchable do
|
20
|
+
text :name, :email, :nickname, :phone, :last_name, :first_name
|
21
|
+
end
|
22
|
+
|
17
23
|
def available_contexts
|
18
|
-
|
24
|
+
contexts.where(:permissions => {:role => :manager}).map(&:subtree).flatten.uniq
|
19
25
|
end
|
20
26
|
end
|
21
27
|
|
data/lib/generators/esp_permissions/install/templates/db/migrate/esp_permissions_create_contexts.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
class EspPermissionsCreateContexts < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
create_table :contexts do |t|
|
4
|
+
t.string :type
|
5
|
+
t.string :title
|
6
|
+
t.string :ancestry
|
7
|
+
t.string :weight
|
8
|
+
t.integer :position
|
9
|
+
t.timestamps
|
10
|
+
end
|
11
|
+
add_index :contexts, :weight
|
12
|
+
add_index :contexts, :ancestry
|
13
|
+
end
|
14
|
+
end
|
@@ -1,4 +1,17 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
require 'curb'
|
2
|
+
require 'progress_bar'
|
3
|
+
|
4
|
+
desc "Syncronize blue-pages tree"
|
5
|
+
|
6
|
+
namespace :esp_permissions do
|
7
|
+
task :sync => :environment do
|
8
|
+
remotes = JSON.parse(Curl::Easy.http_get("#{Settings['blue-pages.url']}/categories/2.json?sync=true").body_str)
|
9
|
+
bar = ProgressBar.new(remotes.count)
|
10
|
+
remotes.each do | remote |
|
11
|
+
(Context.find_by_id(remote['id']) || Context.new).tap do | context |
|
12
|
+
context.update_attributes! remote
|
13
|
+
end
|
14
|
+
bar.increment!
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|