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.
@@ -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, :shallow => true
3
- actions :new, :create, :destroy
2
+ belongs_to :user, :optional => true
4
3
 
5
- #def create
6
- #create!{ :users]}
7
- #end
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
- #def destroy
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
- actions :index
3
+
4
+ actions :index, :new, :create, :destroy, :search
5
+
4
6
  has_scope :page, :default => 1
5
7
 
6
- protected
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
- &lt;<%= mail_to @user.email, @user.email %>&gt;
6
- </span>
2
+ <%= "#{t('permissions.You are adding role to')} #{@user.full_name if @user}" %>
7
3
  </h3>
8
- <%= semantic_form_for resource, :url => esp_permissions.user_permissions_path(@user) do |form| %>
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 :context, :collection => current_user.available_contexts, :member_label => :context_title, :include_blank => t('permissions.not_selected') %>
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) { ('&nbsp;' * 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
- <ul class="collection_list">
10
- <% collection.each do | user | %>
9
+
10
+ <%= link_to "&#43;#{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='name'>
13
- <%= user.name %>
17
+ <div class="name">
18
+ <%= user.full_name %>
14
19
  </div>
15
-
16
- <div class='email'>
20
+ <div class="email">
17
21
  &lt;<%= mail_to user.email, user.email %>&gt;
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 %>
@@ -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: "&larr;"
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], :shallow => true
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,3 +1,3 @@
1
1
  module EspPermissions
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  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
- def create_models
16
- template 'app/models/user.rb'
17
- end
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
 
@@ -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
- # desc "Explaining what the task does"
2
- # task :esp-permissions do
3
- # # Task goes here
4
- # end
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