freeberry 0.2.7 → 0.2.9

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.
Files changed (44) hide show
  1. data/README.rdoc +9 -9
  2. data/Rakefile +1 -1
  3. data/app/controllers/manage/assets_controller.rb +2 -2
  4. data/app/controllers/manage/base_controller.rb +19 -4
  5. data/app/controllers/manage/pages_controller.rb +8 -7
  6. data/app/controllers/manage/posts_controller.rb +5 -6
  7. data/app/controllers/manage/settings_controller.rb +2 -0
  8. data/app/controllers/manage/structures_controller.rb +4 -5
  9. data/app/controllers/manage/users_controller.rb +4 -3
  10. data/config/locales/manage/en.yml +16 -16
  11. data/config/locales/manage/ru.yml +16 -16
  12. data/config/locales/manage/uk.yml +16 -16
  13. data/lib/freeberry.rb +2 -3
  14. data/lib/freeberry/models/asset.rb +15 -21
  15. data/lib/freeberry/models/user.rb +36 -16
  16. data/lib/freeberry/railtie.rb +4 -2
  17. data/lib/freeberry/version.rb +1 -1
  18. data/lib/generators/freeberry/base/base_generator.rb +0 -1
  19. data/lib/generators/freeberry/base/templates/config/application.yml +2 -2
  20. data/lib/generators/freeberry/base/templates/config/seeds.rb +5 -8
  21. data/lib/generators/freeberry/base/templates/helpers/manage/base_helper.rb +4 -0
  22. data/lib/generators/freeberry/base/templates/javascripts/manage.js +1 -1
  23. data/lib/generators/freeberry/base/templates/views/manage/posts/_post.html.erb +2 -2
  24. data/lib/generators/freeberry/base/templates/views/manage/posts/index.html.erb +1 -1
  25. data/lib/generators/freeberry/base/templates/views/manage/structures/_structure.html.erb +2 -3
  26. data/lib/generators/freeberry/base/templates/views/manage/structures/index.html.erb +2 -2
  27. data/lib/generators/freeberry/base/templates/views/manage/users/_user.html.erb +2 -2
  28. data/lib/generators/freeberry/base/templates/views/manage/users/index.html.erb +1 -1
  29. data/lib/generators/freeberry/base/templates/views/shared/manage/_head.html.erb +3 -3
  30. data/lib/generators/freeberry/base/templates/views/shared/manage/_panel.html.erb +3 -3
  31. data/lib/generators/freeberry/manage_scaffold/manage_scaffold_generator.rb +20 -2
  32. data/lib/generators/freeberry/manage_scaffold/templates/multiplay/controller.rb +3 -3
  33. data/lib/generators/freeberry/manage_scaffold/templates/multiplay/views/edit.html.erb +1 -1
  34. data/lib/generators/freeberry/manage_scaffold/templates/multiplay/views/new.html.erb +1 -1
  35. data/lib/generators/freeberry/manage_scaffold/templates/single/controller.rb +4 -3
  36. data/lib/generators/freeberry/manage_scaffold/templates/single/views/edit.html.erb +1 -1
  37. data/lib/generators/freeberry/manage_scaffold/templates/single/views/new.html.erb +1 -1
  38. data/lib/generators/freeberry/models/templates/create_users.rb +2 -2
  39. data/lib/generators/freeberry/models/templates/models/ability.rb +40 -0
  40. data/lib/generators/freeberry/models/templates/models/comment.rb +0 -2
  41. data/lib/generators/freeberry/models/templates/models/user.rb +0 -2
  42. metadata +6 -7
  43. data/lib/freeberry/controllers/authorized_system.rb +0 -60
  44. data/lib/generators/freeberry/base/templates/config/authorization_rules.rb +0 -51
@@ -1,6 +1,6 @@
1
1
  = Freeberry
2
2
 
3
- Brainberry Content Managment System
3
+ Aimbulance Content Managment System
4
4
  For more instruction see {Wiki}[http://wiki.github.com/galetahub/freeberry].
5
5
 
6
6
  == Install
@@ -10,18 +10,19 @@ For more instruction see {Wiki}[http://wiki.github.com/galetahub/freeberry].
10
10
  In your Gemfile:
11
11
 
12
12
  gem 'devise', '1.1.5'
13
- gem 'paperclip', '2.3.7'
13
+ gem 'paperclip', '2.3.8'
14
14
  gem 'nokogiri', '1.4.4'
15
- gem 'declarative_authorization', '0.5.1'
16
- gem 'responders', '0.6.2'
17
- gem 'inherited_resources', '1.1.2'
15
+ gem 'cancan', '1.5.1'
16
+ gem 'inherited_resources', '1.2.1'
18
17
  gem 'haddock', '0.2.2'
19
18
  gem "mime-types", '1.16', :require => 'mime/types'
20
- gem "ckeditor", '3.4.3.pre'
19
+ gem "ckeditor", '3.5.0'
21
20
 
22
21
  gem 'awesome_nested_set', :git => 'git://github.com/galetahub/awesome_nested_set.git'
23
22
  gem 'will_paginate', :git => 'git://github.com/galetahub/will_paginate.git', :branch => 'rails3'
24
23
  gem "freeberry", :git => "git://github.com/galetahub/freeberry.git"
24
+ gem 'cancan_namespace', :git => 'git://github.com/galetahub/cancan_namespace.git'
25
+ gem 'attach_file_field', :git => 'git://github.com/galetahub/attach_file_field.git'
25
26
 
26
27
  Bundler
27
28
 
@@ -31,8 +32,7 @@ Plugins:
31
32
 
32
33
  rails plugin install git://github.com/galetahub/enum_field.git
33
34
  rails plugin install git://github.com/galetahub/salty_slugs.git
34
- rails plugin install git://github.com/galetahub/auto_html.git
35
- rails plugin install git://github.com/galetahub/attach_file_field.git
35
+ rails plugin install git://github.com/galetahub/auto_html.git
36
36
 
37
37
  === Generators
38
38
 
@@ -122,4 +122,4 @@ Manage scaffold:
122
122
 
123
123
  Example goes here.
124
124
 
125
- Copyright (c) 2010 Brainberry, released under the MIT license
125
+ Copyright (c) 2010-2011 Aimbulance, released under the MIT license
data/Rakefile CHANGED
@@ -30,7 +30,7 @@ begin
30
30
  gemspec.name = "freeberry"
31
31
  gemspec.version = Freeberry::Version.dup
32
32
  gemspec.summary = "Rails CRM System"
33
- gemspec.description = "Freeberry is a Brainberry CRM System"
33
+ gemspec.description = "Freeberry is a Aimbulance CRM System"
34
34
  gemspec.email = "galeta.igor@gmail.com"
35
35
  gemspec.homepage = "https://github.com/galetahub/freeberry"
36
36
  gemspec.authors = ["Igor Galeta", "Pavlo Galeta"]
@@ -2,10 +2,10 @@ class Manage::AssetsController < Manage::BaseController
2
2
  before_filter :find_klass, :only => [:create, :sort]
3
3
  before_filter :find_asset, :only => [:destroy]
4
4
 
5
- filter_access_to :sort, :require => :update
6
-
7
5
  respond_to :html, :xml
8
6
 
7
+ authorize_resource
8
+
9
9
  def create
10
10
  @asset ||= @klass.new(params[:asset])
11
11
 
@@ -1,9 +1,24 @@
1
1
  class Manage::BaseController < ApplicationController
2
- layout "manage"
3
-
4
2
  before_filter :authenticate_user!
3
+ check_authorization
4
+
5
+ layout "manage"
6
+ respond_to :html
5
7
 
6
- filter_access_to :all
8
+ protected
7
9
 
8
- respond_to :html, :xml, :json
10
+ rescue_from CanCan::AccessDenied do |exception|
11
+ flash[:failure] = exception.message
12
+ flash[:failure] ||= I18n.t(:access_denied, :scope => [:flash, :users])
13
+
14
+ respond_to do |format|
15
+ format.html { redirect_to new_session_path(:user) }
16
+ format.xml { head :unauthorized }
17
+ format.js { head :unauthorized }
18
+ end
19
+ end
20
+
21
+ def current_ability
22
+ @current_ability ||= ::Ability.new(current_user, :manage)
23
+ end
9
24
  end
@@ -1,12 +1,13 @@
1
1
  class Manage::PagesController < Manage::BaseController
2
2
  before_filter :find_structure
3
+ before_filter :find_page
3
4
 
4
5
  cache_sweeper :page_sweeper, :only => [:create, :update, :destroy]
5
6
 
7
+ authorize_resource
8
+
6
9
  # GET /manage/structures/1/page/edit
7
10
  def edit
8
- @page = @structure.page || @structure.build_page(:title=>@structure.title)
9
-
10
11
  respond_with(@page) do |format|
11
12
  format.html { render :action => (@page.new_record? ? 'new' : 'edit') }
12
13
  end
@@ -14,17 +15,13 @@ class Manage::PagesController < Manage::BaseController
14
15
 
15
16
  # POST /manage/structures/1/page
16
17
  def create
17
- @page = @structure.build_page(params[:page])
18
- @page.save
19
-
18
+ @page.update_attributes(params[:page])
20
19
  respond_with(@page, :location => manage_structures_path)
21
20
  end
22
21
 
23
22
  # PUT /manage/structures/1/page
24
23
  def update
25
- @page = @structure.page
26
24
  @page.update_attributes(params[:page])
27
-
28
25
  respond_with(@page, :location => manage_structures_path)
29
26
  end
30
27
 
@@ -33,4 +30,8 @@ class Manage::PagesController < Manage::BaseController
33
30
  def find_structure
34
31
  @structure = Structure.find(params[:structure_id])
35
32
  end
33
+
34
+ def find_page
35
+ @page = @structure.page || @structure.build_page(:title => @structure.title)
36
+ end
36
37
  end
@@ -1,13 +1,12 @@
1
1
  class Manage::PostsController < Manage::BaseController
2
2
  inherit_resources
3
-
4
- belongs_to :structure
5
-
6
- before_filter :make_filter, :only => [:index]
7
-
8
3
  defaults :route_prefix => 'manage'
9
4
  actions :all, :except => [:show]
5
+ belongs_to :structure
6
+
7
+ load_and_authorize_resource :post, :through => :structure
10
8
 
9
+ before_filter :make_filter, :only => [:index]
11
10
  cache_sweeper :post_sweeper, :only => [:create, :update, :destroy]
12
11
 
13
12
  def create
@@ -32,7 +31,7 @@ class Manage::PostsController < Manage::BaseController
32
31
  options = { :page => params[:page], :per_page => 20 }
33
32
  options.update @search.filter
34
33
 
35
- @posts ||= end_of_association_chain.paginate(options)
34
+ @posts = (@posts || end_of_association_chain).paginate(options)
36
35
  end
37
36
 
38
37
  def make_filter
@@ -1,4 +1,6 @@
1
1
  class Manage::SettingsController < Manage::BaseController
2
+ authorize_resource :class => false
3
+
2
4
  # GET /manage/settings
3
5
  def index
4
6
  end
@@ -1,12 +1,11 @@
1
1
  class Manage::StructuresController < Manage::BaseController
2
2
  inherit_resources
3
-
4
- before_filter :find_root, :only=>[:index]
5
-
6
3
  defaults :route_prefix => 'manage'
7
4
 
8
- filter_access_to :move, :require => :update
5
+ before_filter :find_root, :only=>[:index]
9
6
 
7
+ load_and_authorize_resource
8
+
10
9
  cache_sweeper :structure_sweeper, :only=>[:create, :update, :destroy, :move]
11
10
 
12
11
  def create
@@ -37,6 +36,6 @@ class Manage::StructuresController < Manage::BaseController
37
36
  end
38
37
 
39
38
  def collection
40
- @structures ||= end_of_association_chain.with_depth(1).find(:all)
39
+ @structures = (@structures || end_of_association_chain).with_depth(1)
41
40
  end
42
41
  end
@@ -1,11 +1,12 @@
1
1
  class Manage::UsersController < Manage::BaseController
2
2
  inherit_resources
3
+ defaults :route_prefix => 'manage'
3
4
 
4
5
  before_filter :make_filter, :only=>[:index]
5
6
  before_filter :check_params, :only => [:create, :update]
6
7
  before_filter :find_user, :only=>[:update, :activate]
7
-
8
- defaults :route_prefix => 'manage'
8
+
9
+ load_and_authorize_resource
9
10
 
10
11
  cache_sweeper :user_sweeper, :only=>[:update, :destroy]
11
12
 
@@ -54,7 +55,7 @@ class Manage::UsersController < Manage::BaseController
54
55
  options = { :page => params[:page], :per_page => 20 }
55
56
  options.update @search.filter
56
57
 
57
- @users ||= end_of_association_chain.includes(:avatar).paginate(options)
58
+ @users = (@users || end_of_association_chain).includes(:avatar).paginate(options)
58
59
  end
59
60
 
60
61
  def make_filter
@@ -14,8 +14,8 @@ en:
14
14
 
15
15
  structure:
16
16
  title: "Name"
17
- title_ru: "Name <span>(Rus)</span>"
18
- title_en: "Name <span>(eng.)</span>"
17
+ title_ru: "Name (Rus)"
18
+ title_en: "Name (eng.)"
19
19
  parent_id: "Main Categories"
20
20
  is_visible: "Show?"
21
21
  kind: "Page Type"
@@ -24,32 +24,32 @@ en:
24
24
 
25
25
  header:
26
26
  title: "Title page"
27
- title_ru: "Title page <span>(Rus)</span>"
28
- title_en: "Title page <span>(eng.)</span>"
27
+ title_ru: "Title page (Rus)"
28
+ title_en: "Title page (eng.)"
29
29
  keywords: "Keywords"
30
- keywords_ru: "Keywords <span>(Rus)</span>"
31
- keywords_en: "Keywords <span>(eng.)</span>"
30
+ keywords_ru: "Keywords (Rus)"
31
+ keywords_en: "Keywords (eng.)"
32
32
  description: "Page Description"
33
- description_ru: "Description page <span>(Rus)</span>"
34
- description_en: "Page Description <span>(eng.)</span>"
33
+ description_ru: "Description page (Rus)"
34
+ description_en: "Page Description (eng.)"
35
35
 
36
36
  post:
37
37
  title: "Name"
38
- title_ru: "Name <span>(Rus)</span>"
39
- title_en: "Name <span>(eng.)</span>"
38
+ title_ru: "Name (Rus)"
39
+ title_en: "Name (eng.)"
40
40
  content: "Content"
41
- content_ru: "Content <span>(Rus)</span>"
42
- content_en: "Contents <span>(eng.)</span>"
41
+ content_ru: "Content (Rus)"
42
+ content_en: "Contents (eng.)"
43
43
  created_at: "Date / Time"
44
44
  picture: "Picture"
45
45
 
46
46
  page:
47
47
  title: "Name"
48
- title_ru: "Name <span>(Rus)</span>"
49
- title_en: "Name <span>(eng.)</span>"
48
+ title_ru: "Name (Rus)"
49
+ title_en: "Name (eng.)"
50
50
  content: "Content"
51
- content_ru: "Content <span>(Rus)</span>"
52
- content_en: "Contents <span>(eng.)</span>"
51
+ content_ru: "Content (Rus)"
52
+ content_en: "Contents (eng.)"
53
53
 
54
54
  tag:
55
55
  name: "Name"
@@ -14,8 +14,8 @@ ru:
14
14
 
15
15
  structure:
16
16
  title: "Название"
17
- title_ru: "Название <span>(рус.)</span>"
18
- title_en: "Название <span>(eng.)</span>"
17
+ title_ru: "Название (рус.)"
18
+ title_en: "Название (eng.)"
19
19
  parent_id: "Главная категория"
20
20
  is_visible: "Отображать?"
21
21
  kind: "Тип страницы"
@@ -24,32 +24,32 @@ ru:
24
24
 
25
25
  header:
26
26
  title: "Заглавие страницы"
27
- title_ru: "Заглавие страницы <span>(рус.)</span>"
28
- title_en: "Заглавие страницы <span>(eng.)</span>"
27
+ title_ru: "Заглавие страницы (рус.)"
28
+ title_en: "Заглавие страницы (eng.)"
29
29
  keywords: "Ключевые слова"
30
- keywords_ru: "Ключевые слова <span>(рус.)</span>"
31
- keywords_en: "Ключевые слова <span>(eng.)</span>"
30
+ keywords_ru: "Ключевые слова (рус.)"
31
+ keywords_en: "Ключевые слова (eng.)"
32
32
  description: "Описание страницы"
33
- description_ru: "Описание страницы <span>(рус.)</span>"
34
- description_en: "Описание страницы <span>(eng.)</span>"
33
+ description_ru: "Описание страницы (рус.)"
34
+ description_en: "Описание страницы (eng.)"
35
35
 
36
36
  post:
37
37
  title: "Название"
38
- title_ru: "Название <span>(рус.)</span>"
39
- title_en: "Название <span>(eng.)</span>"
38
+ title_ru: "Название (рус.)"
39
+ title_en: "Название (eng.)"
40
40
  content: "Содержание"
41
- content_ru: "Содержание <span>(рус.)</span>"
42
- content_en: "Содержание <span>(eng.)</span>"
41
+ content_ru: "Содержание (рус.)"
42
+ content_en: "Содержание (eng.)"
43
43
  created_at: "Дата/Время"
44
44
  picture: "Картинка"
45
45
 
46
46
  page:
47
47
  title: "Название"
48
- title_ru: "Название <span>(рус.)</span>"
49
- title_en: "Название <span>(eng.)</span>"
48
+ title_ru: "Название (рус.)"
49
+ title_en: "Название (eng.)"
50
50
  content: "Содержание"
51
- content_ru: "Содержание <span>(рус.)</span>"
52
- content_en: "Содержание <span>(eng.)</span>"
51
+ content_ru: "Содержание (рус.)"
52
+ content_en: "Содержание (eng.)"
53
53
 
54
54
  tag:
55
55
  name: "Название"
@@ -14,8 +14,8 @@ uk:
14
14
 
15
15
  structure:
16
16
  title: "Назва"
17
- title_ru: "Назва <span>(рос.)</span>"
18
- title_en: "Назва <span>(eng.)</span>"
17
+ title_ru: "Назва (рос.)"
18
+ title_en: "Назва (eng.)"
19
19
  parent_id: "Головна категорія"
20
20
  is_visible: "Відображати?"
21
21
  kind: "Тип сторінки"
@@ -24,32 +24,32 @@ uk:
24
24
 
25
25
  header:
26
26
  title: "Заголовок сторінки"
27
- title_ru: "Заголовок сторінки <span>(рос.)</span>"
28
- title_en: "Заголовок сторінки <span>(eng.)</span>"
27
+ title_ru: "Заголовок сторінки (рос.)"
28
+ title_en: "Заголовок сторінки (eng.)"
29
29
  keywords: "Ключові слова"
30
- keywords_ru: "Ключові слова <span>(рос.)</span>"
31
- keywords_en: "Ключові слова <span>(eng.)</span>"
30
+ keywords_ru: "Ключові слова (рос.)"
31
+ keywords_en: "Ключові слова (eng.)"
32
32
  description: "Опис сторінки"
33
- description_ru: "Опис сторінки <span>(рос.)</span>"
34
- description_en: "Опис сторінки <span>(eng.)</span>"
33
+ description_ru: "Опис сторінки (рос.)"
34
+ description_en: "Опис сторінки (eng.)"
35
35
 
36
36
  post:
37
37
  title: "Назва"
38
- title_ru: "Назва <span>(рос.)</span>"
39
- title_en: "Назва <span>(eng.)</span>"
38
+ title_ru: "Назва (рос.)"
39
+ title_en: "Назва (eng.)"
40
40
  content: "Зміст"
41
- content_ru: "Зміст <span>(рос.)</span>"
42
- content_en: "Зміст <span>(eng.)</span>"
41
+ content_ru: "Зміст (рос.)"
42
+ content_en: "Зміст (eng.)"
43
43
  created_at: "Дата / Час"
44
44
  picture: "Зображення"
45
45
 
46
46
  page:
47
47
  title: "Назва"
48
- title_ru: "Назва <span>(рос.)</span>"
49
- title_en: "Назва <span>(eng.)</span>"
48
+ title_ru: "Назва (рос.)"
49
+ title_en: "Назва (eng.)"
50
50
  content: "Зміст"
51
- content_ru: "Зміст <span>(рос.)</span>"
52
- content_en: "Зміст <span>(eng.)</span>"
51
+ content_ru: "Зміст (рос.)"
52
+ content_en: "Зміст (eng.)"
53
53
 
54
54
  tag:
55
55
  name: "Назва"
@@ -13,9 +13,8 @@ module Freeberry
13
13
 
14
14
  # Controllers
15
15
  module Controllers
16
- autoload :AuthorizedSystem, 'freeberry/controllers/authorized_system'
17
- autoload :HeadOptions, 'freeberry/controllers/head_options'
18
- autoload :HelperUtils, 'freeberry/controllers/helper_utils'
16
+ autoload :HeadOptions, 'freeberry/controllers/head_options'
17
+ autoload :HelperUtils, 'freeberry/controllers/helper_utils'
19
18
  end
20
19
 
21
20
  # Models
@@ -14,7 +14,7 @@ module Freeberry
14
14
  belongs_to :assetable, :polymorphic => true
15
15
 
16
16
  before_validation :make_content_type
17
- before_create :read_dimensions, :parameterize_filename
17
+ before_create :read_dimensions
18
18
  end
19
19
  end
20
20
 
@@ -52,23 +52,24 @@ module Freeberry
52
52
  I18n.l(created_at, :format => "%d.%m.%Y %H:%M")
53
53
  end
54
54
 
55
- def to_xml(options = {})
56
- builder = options[:builder] ||= Nokogiri::XML::Builder.new(options)
57
-
58
- builder.send(self.type.to_s.downcase) do |xml|
59
- xml.id_ self.id
60
- xml.filename self.filename
61
- xml.size self.size
62
- xml.path self.url
55
+ def to_xml(options = {}, &block)
56
+ options = {:only => [:id], :root => 'asset'}.merge(options)
57
+
58
+ options[:procs] ||= Proc.new do |options, record|
59
+ options[:builder].tag!('filename', filename)
60
+ options[:builder].tag!('path', url)
61
+ options[:builder].tag!('size', size)
63
62
 
64
- xml.styles do
65
- self.styles.each do |style|
66
- xml.send(style.first, self.url(style.first))
63
+ unless styles.empty?
64
+ options[:builder].tag!('styles') do |xml|
65
+ styles.each do |style|
66
+ xml.tag!(style.first, url(style.first))
67
+ end
67
68
  end
68
- end unless self.styles.empty?
69
+ end
69
70
  end
70
71
 
71
- builder.to_xml
72
+ super
72
73
  end
73
74
 
74
75
  def has_dimensions?
@@ -86,13 +87,6 @@ module Freeberry
86
87
 
87
88
  protected
88
89
 
89
- def parameterize_filename
90
- unless data_file_name.blank?
91
- filename = Freeberry::Utils.parameterize_filename(data_file_name)
92
- self.data.instance_write(:file_name, filename)
93
- end
94
- end
95
-
96
90
  def read_dimensions
97
91
  if image? && has_dimensions?
98
92
  self.width = geometry.width
@@ -9,15 +9,14 @@ module Freeberry
9
9
 
10
10
  module ClassMethods
11
11
  def self.extended(base)
12
- base.class_eval do
13
- before_validation :make_login
14
-
12
+ base.class_eval do
15
13
  has_many :roles, :dependent => :delete_all
16
14
  has_one :avatar, :as => :assetable, :dependent => :destroy, :autosave => true
17
15
 
18
- scope :admins, joins(:roles).where(["`roles`.role_type = ?", ::RoleType.admin.id])
19
- scope :with_role, proc {|role| joins(:roles).where(["`roles`.role_type = ?", role.id]) }
16
+ scope :with_role, lambda {|role| joins(:roles).where(["`roles`.role_type = ?", role.id]) }
17
+ scope :admins, with_role(::RoleType.admin)
20
18
 
19
+ before_validation :generate_login, :if => :has_login?
21
20
  before_create :set_default_role, :if => :roles_empty?
22
21
  end
23
22
  end
@@ -39,7 +38,11 @@ module Freeberry
39
38
  def roles_empty?
40
39
  self.roles.empty?
41
40
  end
42
-
41
+
42
+ def has_login?
43
+ respond_to?(:login)
44
+ end
45
+
43
46
  def roles_attributes=(value)
44
47
  options = value || {}
45
48
  options.each do |k, v|
@@ -51,6 +54,26 @@ module Freeberry
51
54
  (roles || []).map {|r| r.to_sym}
52
55
  end
53
56
 
57
+ def current_role
58
+ self.roles.first
59
+ end
60
+
61
+ def role_type_id
62
+ if current_role
63
+ current_role.role_type.id
64
+ end
65
+ end
66
+
67
+ def role_type_id=(value)
68
+ role_id = value.blank? ? nil : value.to_i
69
+
70
+ if ::RoleType.all.map(&:id).include?(role_id)
71
+ ::RoleType.all.each do |role_type|
72
+ create_or_destroy_role(role_type.id, role_type.id == role_id)
73
+ end
74
+ end
75
+ end
76
+
54
77
  def state
55
78
  return 'active' if active?
56
79
  return 'register' unless confirmed?
@@ -81,16 +104,13 @@ module Freeberry
81
104
  end
82
105
  end
83
106
 
84
- def make_login
85
- return if self.email.blank?
86
-
87
- if self.login.blank?
88
- tmp_login = self.email.split('@').first
89
- tmp_login ||= ActiveSupport::SecureRandom.hex(7)
90
- tmp_login = tmp_login.parameterize.downcase.gsub('.', '_')
91
- tmp_login = [tmp_login, ActiveSupport::SecureRandom.hex(4)].join('_') unless self.class.find_by_login(tmp_login).nil?
92
- self.login = tmp_login
93
- end
107
+ def generate_login
108
+ self.login ||= begin
109
+ unless email.blank?
110
+ tmp_login = email.split('@').first
111
+ tmp_login.parameterize.downcase.gsub(/[^A-Za-z0-9-]+/, '-').gsub(/-+/, '-')
112
+ end
113
+ end
94
114
  end
95
115
  end
96
116
  end
@@ -21,10 +21,12 @@ module Freeberry
21
21
  end
22
22
 
23
23
  config.after_initialize do
24
- ::ActionController::Base.send :include, Freeberry::Controllers::AuthorizedSystem
25
24
  ::ActionController::Base.send :include, Freeberry::Controllers::HeadOptions
26
-
27
25
  ::ActionView::Base.send :include, Freeberry::Controllers::HelperUtils
26
+
27
+ ::Paperclip.interpolates('basename') do |attachment, style|
28
+ Freeberry::Utils.parameterize_filename(attachment.original_filename.gsub(/#{File.extname(attachment.original_filename)}$/, ""))
29
+ end
28
30
  end
29
31
 
30
32
  rake_tasks do
@@ -3,7 +3,7 @@ module Freeberry
3
3
  module Version
4
4
  MAJOR = 0
5
5
  MINOR = 2
6
- RELEASE = 7
6
+ RELEASE = 9
7
7
 
8
8
  def self.dup
9
9
  "#{MAJOR}.#{MINOR}.#{RELEASE}"
@@ -34,7 +34,6 @@ module Freeberry
34
34
 
35
35
  def copy_configurations
36
36
  copy_file('config/words', 'config/words')
37
- copy_file('config/authorization_rules.rb', 'config/authorization_rules.rb')
38
37
  copy_file('config/seeds.rb', 'db/seeds.rb')
39
38
  copy_file('config/freeberry.rb', 'config/initializers/freeberry.rb')
40
39
 
@@ -1,4 +1,4 @@
1
1
  mailer:
2
2
  subject_prefix: "[<%= app_name %>] "
3
- from: "no-reply@brainberry.ua"
4
- reply_to: "info@brainberry.ua"
3
+ from: "no-reply@aimbulance.com"
4
+ reply_to: "info@aimbulance.com"
@@ -1,7 +1,4 @@
1
- def insert_user
2
- # TurnOff Authorization system
3
- Authorization.ignore_access_control(true)
4
-
1
+ def insert_user
5
2
  # Path to words
6
3
  Haddock::Password.diction = Rails.root.join("config", "words")
7
4
 
@@ -10,14 +7,14 @@ def insert_user
10
7
  Role.truncate_table
11
8
  password = Haddock::Password.generate
12
9
 
13
- admin = User.new(:name=>'Administrator', :email=>'bugs@brainberry.com.ua',
10
+ admin = User.new(:name=>'Administrator', :email=>'dev@aimbulance.com',
14
11
  :password=>password, :password_confirmation=>password)
15
- admin.login = 'admin'
12
+ #admin.login = 'admin'
13
+ admin.roles.build(:role_type => RoleType.admin)
16
14
  admin.skip_confirmation!
17
15
  admin.save!
18
- admin.roles.create(:role_type => RoleType.admin)
19
16
 
20
- puts "Admin account: email: #{admin.email}, :password: #{admin.password}"
17
+ puts "Admin: #{admin.email}, #{admin.password}"
21
18
  end
22
19
 
23
20
  def insert_structures
@@ -1,4 +1,8 @@
1
1
  module Manage::BaseHelper
2
+ def content_manager?
3
+ user_signed_in? && current_user.admin?
4
+ end
5
+
2
6
  def link_to_unless_current_span2(name, options = {}, html_options = {}, &block)
3
7
  if current_page?(options)
4
8
  if block_given?
@@ -1,6 +1,6 @@
1
1
  /* ------------------------------------------------------------------------
2
2
  * manage.js
3
- * Copyright (c) 2007-2010 Brainberry, LLC. All rights reserved.
3
+ * Copyright (c) 2007-2011 Aimbulance, LLC. All rights reserved.
4
4
  * ------------------------------------------------------------------------ */
5
5
 
6
6
  $(document).ready(function(){
@@ -1,10 +1,10 @@
1
1
  <%= content_tag(:div, :id => dom_id(post), :class=>"dinamic-bl") do %>
2
2
  <div class="act-bl" style="display:none;">
3
- <% permitted_to? :update, post, :context => :manage_posts do %>
3
+ <% if can? :update, post, :context => :manage %>
4
4
  <%= link_to image_tag("manage/ico_edit.gif", :title=>t('manage.edit')), edit_manage_structure_post_path(@structure.id, post.id), :class=>"icons" %>
5
5
  <% end %>
6
6
 
7
- <% permitted_to? :delete, post, :context => :manage_posts do %>
7
+ <% if can? :delete, post, :context => :manage %>
8
8
  <%= link_to image_tag("manage/ico_del.gif", :title=>t('manage.delete')), manage_structure_post_path(@structure.id, post.id),
9
9
  :method=>:delete, :confirm=>t("manage.confirm_delete"), :class=>"icons" %>
10
10
  <% end %>
@@ -7,7 +7,7 @@
7
7
  <%= link_to @structure.title, manage_structure_posts_path(@structure.id), :class=>"dark-text" %>
8
8
 
9
9
  <div class="act-bl">
10
- <% permitted_to? :create, :manage_posts do %>
10
+ <% if can? :create, Post, :context => :manage %>
11
11
  <%= link_to t('manage.add'), new_manage_structure_post_path(@structure.id), :class=>"create" %>
12
12
  <% end %>
13
13
  </div>
@@ -3,7 +3,7 @@
3
3
  <div class="r-corn">
4
4
  <%= link_to structure.title, edit_structure_record_path(structure), :class=>(structure.descendants_count.zero? ? "dark-text" : "dark-arr"), :id=>"a#{structure.id}" %>
5
5
  <div class="act-bl" style="display:none;">
6
- <% permitted_to? :update, structure, :context => :manage_structures do %>
6
+ <% if can? :update, structure, :context => :manage %>
7
7
  <%= link_to image_tag("manage/ico_down.gif", :alt=>t('manage.position.down'), :title=>t('manage.position.down')),
8
8
  move_manage_structure_path(:id => structure.id, :direction => 'down', :format => :json),
9
9
  :remote => true,
@@ -18,7 +18,7 @@
18
18
  <%= link_to image_tag("manage/ico_settings.gif", :alt=>t('manage.label_settings'), :title=>t('manage.label_settings')), edit_manage_structure_path(:id=>structure.id), :class=>"icons" %>
19
19
  <% end %>
20
20
 
21
- <% permitted_to? :delete, structure, :context => :manage_structures do %>
21
+ <% if can? :delete, structure, :context => :manage %>
22
22
  <%= link_to image_tag("manage/ico_del.gif", :alt=>t('manage.delete'), :title=>t('manage.delete')), manage_structure_path(:id=>structure.id),
23
23
  :method=>:delete, :confirm=>t("manage.confirm_delete"), :class=>"icons" %>
24
24
  <% end %>
@@ -32,4 +32,3 @@
32
32
  <% end %>
33
33
  <% end %>
34
34
  <% end %>
35
-
@@ -5,11 +5,11 @@
5
5
  <%= link_to @structure.title, root_path, :class=>"dark-arr", :id=>"a#{@structure.id}" %>
6
6
 
7
7
  <div class="act-bl">
8
- <% permitted_to? :create, :manage_structures do %>
8
+ <% if can? :create, Structure, :context => :manage %>
9
9
  <%= link_to t('manage.buttons.create_structure'), new_manage_structure_path, :class=>"create" %>
10
10
  <% end %>
11
11
 
12
- <% permitted_to? :update, @structure, :context => :manage_structures do %>
12
+ <% if can? :update, @structure, :context => :manage %>
13
13
  <%= link_to image_tag("manage/ico_edit.gif", :title=>t('manage.edit')), edit_manage_structure_page_path(@structure.id), :class=>"icons" %>
14
14
  <%= link_to image_tag("manage/ico_settings.gif", :title=>t('manage.label_settings')), edit_manage_structure_path(@structure.id), :class=>"icons" %>
15
15
  <% end %>
@@ -1,10 +1,10 @@
1
1
  <%= content_tag(:div, :id=>dom_id(user), :class=>"dinamic-bl #{user.state}") do %>
2
2
  <div class="act-bl" style="display:none;">
3
- <% permitted_to? :update, user, :context => :manage_users do %>
3
+ <% if can? :update, user, :context => :manage %>
4
4
  <%= link_to image_tag("manage/ico_edit.gif", :title=>t('manage.edit')), edit_manage_user_path(:id=>user.id), :class=>"icons" %>
5
5
  <% end %>
6
6
 
7
- <% permitted_to? :delete, user, :context => :manage_users do %>
7
+ <% if can? :delete, user, :context => :manage %>
8
8
  <%= link_to image_tag("manage/ico_del.gif", :title=>t('manage.delete')), manage_user_path(:id=>user.id),
9
9
  :method=>:delete, :confirm=>t("manage.confirm_delete"), :class=>"icons" %>
10
10
  <% end %>
@@ -6,7 +6,7 @@
6
6
  <div class="r-corn">
7
7
  <%= link_to t('manage.menu.users'), manage_users_path, :class=>"dark-text" %>
8
8
  <div class="act-bl">
9
- <% permitted_to? :create, :manage_users do %>
9
+ <% if can? :create, User, :context => :manage %>
10
10
  <%= link_to t('manage.add'), new_manage_user_path, :class=>"create" %>
11
11
  <% end %>
12
12
  </div>
@@ -4,15 +4,15 @@
4
4
 
5
5
  <div class="main-menu">
6
6
  <ul>
7
- <% permitted_to? :read, :manage_structures do %>
7
+ <% if can? :read, Structure, :context => :manage %>
8
8
  <li><%= link_to_unless_current_span2 t('manage.menu.structures'), manage_structures_path %></li>
9
9
  <% end %>
10
10
 
11
- <% permitted_to? :read, :manage_users do %>
11
+ <% if can? :read, User, :context => :manage %>
12
12
  <li><%= link_to_unless_current_span2 t('manage.menu.users'), manage_users_path %></li>
13
13
  <% end %>
14
14
 
15
- <% permitted_to? :read, :manage_settings do %>
15
+ <% if can? :read, :settings, :context => :manage %>
16
16
  <li><%= link_to_unless_current_span2 t('manage.menu.settings'), manage_settings_path %></li>
17
17
  <% end %>
18
18
  </ul>
@@ -5,15 +5,15 @@
5
5
  <div class="p-logo"><%=raw t('manage.title') %></div>
6
6
  <div class="panel-main-menu">
7
7
  <ul>
8
- <% permitted_to? :read, :manage_structures do %>
8
+ <% if can? :read, Structure, :context => :manage %>
9
9
  <li><%= link_to_unless_current_span2 t('manage.menu.structures'), manage_structures_path %></li>
10
10
  <% end %>
11
11
 
12
- <% permitted_to? :read, :manage_users do %>
12
+ <% if can? :read, User, :context => :manage %>
13
13
  <li><%= link_to_unless_current_span2 t('manage.menu.users'), manage_users_path %></li>
14
14
  <% end %>
15
15
 
16
- <% permitted_to? :read, :manage_settings do %>
16
+ <% if can? :read, :settings, :context => :manage %>
17
17
  <li><%= link_to_unless_current_span2 t('manage.menu.settings'), manage_settings_path %></li>
18
18
  <% end %>
19
19
  </ul>
@@ -52,7 +52,25 @@ module Freeberry
52
52
  end
53
53
 
54
54
  def klass
55
+ # First priority is the namespaced modek, e.g. User::Group
56
+ @klass ||= begin
57
+ namespaced_class = name.singularize
58
+ namespaced_class.constantize
59
+ rescue NameError
60
+ nil
61
+ end
62
+
63
+ # Second priority the camelcased c, i.e. UserGroup
64
+ @klass ||= begin
65
+ camelcased_class = name.gsub('::', '').singularize
66
+ camelcased_class.constantize
67
+ rescue NameError
68
+ nil
69
+ end
70
+
55
71
  @klass ||= model_name.constantize
72
+
73
+ @klass
56
74
  end
57
75
 
58
76
  def model
@@ -60,12 +78,12 @@ module Freeberry
60
78
  end
61
79
 
62
80
  def model_name
63
- @model_name ||= singular_name.camelize
81
+ @model_name ||= name.camelize
64
82
  @model_name
65
83
  end
66
84
 
67
85
  def controller_class_name
68
- @controller_class_name ||= singular_name.pluralize.camelize
86
+ @controller_class_name ||= name.pluralize.camelize
69
87
  end
70
88
 
71
89
  def controller_file_name
@@ -1,11 +1,11 @@
1
1
  class Manage::<%= controller_class_name %>Controller < Manage::BaseController
2
2
  inherit_resources
3
-
3
+ defaults :route_prefix => 'manage'
4
4
  belongs_to :<%= parent_singular_name %>
5
5
 
6
6
  before_filter :make_filter, :only=>[:index]
7
7
 
8
- defaults :route_prefix => 'manage'
8
+ load_and_authorize_resource :<%= parent_singular_name %>, :class => <%= model_name %>
9
9
 
10
10
  def create
11
11
  create!{ manage_<%= parent_singular_name %>_<%= plural_name %>_path(@<%= parent_singular_name %>.id) }
@@ -29,7 +29,7 @@ class Manage::<%= controller_class_name %>Controller < Manage::BaseController
29
29
  options = { :page => params[:page], :per_page => 20 }
30
30
  options.update @search.filter
31
31
 
32
- @<%= plural_name %> ||= end_of_association_chain.paginate(options)
32
+ @<%= plural_name %> = (@<%= plural_name %> || end_of_association_chain).paginate(options)
33
33
  end
34
34
 
35
35
  def make_filter
@@ -1,7 +1,7 @@
1
1
  <div class="edit-bl">
2
2
  <div class="bot-bg">
3
3
  <div class="block-title"><%%= t('manage.edit') %>:</div>
4
- <%%= form_for @<%= singular_name %>, :as => :<%= singular_name %>, :url => manage_<%= parent_singular_name %>_<%= singular_name %>_path(@<%= parent_singular_name %>.id, @<%= singular_name %>.id), :html=>{:multipart=>true, :method=>:put, :id=>'<%= singular_name %>_form'} do |f| -%>
4
+ <%%= form_for [:manage, @<%= parent_singular_name %>, @<%= singular_name %>], :html=>{:multipart=>true, :id=>'<%= singular_name %>_form'} do |f| -%>
5
5
  <%%= render :partial=>"manage/<%= plural_name %>/form", :object=>f %>
6
6
 
7
7
  <div style="padding: 20px 0px 10px 20px;" class="buts">
@@ -1,7 +1,7 @@
1
1
  <div class="edit-bl">
2
2
  <div class="bot-bg">
3
3
  <div class="block-title"><%%= t('manage.add') %>:</div>
4
- <%%= form_for @<%= singular_name %>, :as => :<%= singular_name %>, :url => manage_<%= parent_singular_name %>_<%= plural_name %>_path(@<%= parent_singular_name %>.id), :html=>{:multipart=>true, :id=>'<%= singular_name %>_form'} do |f| -%>
4
+ <%%= form_for [:manage, @<%= parent_singular_name %>, @<%= singular_name %>], :html=>{:multipart=>true, :id=>'<%= singular_name %>_form'} do |f| -%>
5
5
  <%%= render :partial=>"manage/<%= plural_name %>/form", :object=>f %>
6
6
 
7
7
  <div style="padding: 20px 0px 10px 20px;" class="buts">
@@ -1,9 +1,10 @@
1
1
  class Manage::<%= controller_class_name %>Controller < Manage::BaseController
2
2
  inherit_resources
3
+ defaults :route_prefix => 'manage'
3
4
 
4
5
  before_filter :make_filter, :only=>[:index]
5
-
6
- defaults :route_prefix => 'manage'
6
+
7
+ load_and_authorize_resource :class => <%= class_name %>
7
8
 
8
9
  def create
9
10
  create!{ manage_<%= plural_name %>_path }
@@ -23,7 +24,7 @@ class Manage::<%= controller_class_name %>Controller < Manage::BaseController
23
24
  options = { :page => params[:page], :per_page => 20 }
24
25
  options.update @search.filter
25
26
 
26
- @<%= plural_name %> ||= end_of_association_chain.paginate(options)
27
+ @<%= plural_name %> = (@<%= plural_name %> || end_of_association_chain).paginate(options)
27
28
  end
28
29
 
29
30
  def make_filter
@@ -1,7 +1,7 @@
1
1
  <div class="edit-bl">
2
2
  <div class="bot-bg">
3
3
  <div class="block-title"><%%= t('manage.edit') %>:</div>
4
- <%%= form_for @<%= singular_name %>, :as => :<%= singular_name %>, :url => manage_<%= singular_name %>_path(@<%= singular_name %>.id), :html=>{:multipart=>true, :method=>:put, :id=>'<%= singular_name %>_form'} do |f| -%>
4
+ <%%= form_for [:manage, @<%= singular_name %>], :html=>{:multipart=>true, :id=>'<%= singular_name %>_form'} do |f| -%>
5
5
  <%%= render :partial=>"manage/<%= plural_name %>/form", :object=>f %>
6
6
 
7
7
  <div style="padding: 20px 0px 10px 20px;" class="buts">
@@ -1,7 +1,7 @@
1
1
  <div class="edit-bl">
2
2
  <div class="bot-bg">
3
3
  <div class="block-title"><%%= t('manage.add') %>:</div>
4
- <%%= form_for @<%= singular_name %>, :as => :<%= singular_name %>, :url => manage_<%= plural_name %>_path, :html=>{:multipart=>true, :id=>'<%= singular_name %>_form'} do |f| -%>
4
+ <%%= form_for [:manage, @<%= singular_name %>], :html=>{:multipart=>true, :id=>'<%= singular_name %>_form'} do |f| -%>
5
5
  <%%= render :partial=>"manage/<%= plural_name %>/form", :object=>f %>
6
6
 
7
7
  <div style="padding: 20px 0px 10px 20px;" class="buts">
@@ -2,7 +2,7 @@ class FreeberryCreateUsers < ActiveRecord::Migration
2
2
  def self.up
3
3
  create_table(:users) do |t|
4
4
  t.string :name, :limit => 150
5
- t.string :login, :limit => 20, :null => false
5
+ # t.string :login, :limit => 20, :null => false
6
6
 
7
7
  t.database_authenticatable :null => false
8
8
  t.recoverable
@@ -15,10 +15,10 @@ class FreeberryCreateUsers < ActiveRecord::Migration
15
15
  t.timestamps
16
16
  end
17
17
 
18
- add_index :users, :login, :unique => true
19
18
  add_index :users, :email, :unique => true
20
19
  add_index :users, :reset_password_token, :unique => true
21
20
  add_index :users, :confirmation_token, :unique => true
21
+ # add_index :users, :login, :unique => true
22
22
  # add_index :users, :unlock_token, :unique => true
23
23
  end
24
24
 
@@ -0,0 +1,40 @@
1
+ class Ability
2
+ include CanCanNamespace::Ability
3
+
4
+ attr_accessor :context, :user
5
+
6
+ def initialize(user, context = nil)
7
+ alias_action :delete, :to => :destroy
8
+
9
+ @user = (user || User.new) # guest user (not logged in)
10
+ @context = context
11
+
12
+ case @user.role_type_id
13
+ when RoleType.default.id then default
14
+ when RoleType.redactor.id then redactor
15
+ when RoleType.moderator.id then moderator
16
+ when RoleType.admin.id then admin
17
+ end
18
+ end
19
+
20
+ def default
21
+ can :create, Comment
22
+ can [:update, :destroy], Comment, :user_id => @user.id, :newly_created? => true
23
+ end
24
+
25
+ def redactor
26
+ # TODO
27
+ end
28
+
29
+ def moderator
30
+ # TODO
31
+ end
32
+
33
+ def admin
34
+ can :manage, :all
35
+ can :manage, :all, :context => :manage
36
+
37
+ can [:create, :destroy], Comment
38
+ can :update, Comment, :user_id => @user.id
39
+ end
40
+ end
@@ -1,8 +1,6 @@
1
1
  class Comment < ActiveRecord::Base
2
2
  include Freeberry::Models::Comment
3
3
 
4
- using_access_control
5
-
6
4
  validates :content, :presence => true, :length => { :maximum => 500 }
7
5
  validates :commentable_type, :presence => true, :inclusion => { :in => %w( Post Article ) }
8
6
  validates :author_type, :inclusion => { :in => %w( User FreeberryAuth::Account ) }, :allow_blank => true
@@ -35,8 +35,6 @@
35
35
  class User < ActiveRecord::Base
36
36
  include Freeberry::Models::User
37
37
 
38
- using_access_control
39
-
40
38
  # Include default devise modules.
41
39
  devise :database_authenticatable, :confirmable, :lockable, :timeoutable,
42
40
  :recoverable, :rememberable, :trackable, :validatable
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: freeberry
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 5
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 2
9
- - 7
10
- version: 0.2.7
9
+ - 9
10
+ version: 0.2.9
11
11
  platform: ruby
12
12
  authors:
13
13
  - Igor Galeta
@@ -16,11 +16,11 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-02-07 00:00:00 +02:00
19
+ date: 2011-03-18 00:00:00 +02:00
20
20
  default_executable:
21
21
  dependencies: []
22
22
 
23
- description: Freeberry is a Brainberry CRM System
23
+ description: Freeberry is a Aimbulance CRM System
24
24
  email: galeta.igor@gmail.com
25
25
  executables: []
26
26
 
@@ -52,7 +52,6 @@ files:
52
52
  - config/routes.rb
53
53
  - lib/freeberry.rb
54
54
  - lib/freeberry/accessible_attributes.rb
55
- - lib/freeberry/controllers/authorized_system.rb
56
55
  - lib/freeberry/controllers/head_options.rb
57
56
  - lib/freeberry/controllers/helper_utils.rb
58
57
  - lib/freeberry/core_ext.rb
@@ -83,7 +82,6 @@ files:
83
82
  - lib/generators/freeberry/base/USAGE
84
83
  - lib/generators/freeberry/base/base_generator.rb
85
84
  - lib/generators/freeberry/base/templates/config/application.yml
86
- - lib/generators/freeberry/base/templates/config/authorization_rules.rb
87
85
  - lib/generators/freeberry/base/templates/config/database.yml
88
86
  - lib/generators/freeberry/base/templates/config/freeberry.rb
89
87
  - lib/generators/freeberry/base/templates/config/logrotate-config
@@ -309,6 +307,7 @@ files:
309
307
  - lib/generators/freeberry/models/templates/create_roles.rb
310
308
  - lib/generators/freeberry/models/templates/create_structures.rb
311
309
  - lib/generators/freeberry/models/templates/create_users.rb
310
+ - lib/generators/freeberry/models/templates/models/ability.rb
312
311
  - lib/generators/freeberry/models/templates/models/asset.rb
313
312
  - lib/generators/freeberry/models/templates/models/attachment_file.rb
314
313
  - lib/generators/freeberry/models/templates/models/avatar.rb
@@ -1,60 +0,0 @@
1
- module Freeberry
2
- module Controllers
3
- module AuthorizedSystem
4
- def self.included(base)
5
- base.send(:extend, ClassMethods)
6
- base.send(:include, InstanceMethods)
7
- end
8
-
9
- module ClassMethods
10
- def self.extended(base)
11
- base.class_eval do
12
- skip_before_filter :set_current_user
13
-
14
- # Send current_user to Declarative authorization module
15
- before_filter :set_current_user
16
-
17
- helper_method :content_manager?
18
- end
19
- end
20
- end
21
-
22
- module InstanceMethods
23
- protected
24
-
25
- # set_current_user sets the global current user for this request. This
26
- # is used by model security that does not have access to the
27
- # controller#current_user method. It is called as a before_filter.
28
- def set_current_user
29
- without_access_control do
30
- Authorization.current_user = current_user
31
- end
32
- end
33
-
34
- def permission_denied
35
- flash[:error] = I18n.t(:access_denied, :scope => [:flash, :users])
36
-
37
- respond_to do |format|
38
- format.html { redirect_to new_session_path(:user) }
39
- format.xml { head :unauthorized }
40
- format.js { head :unauthorized }
41
- end
42
- end
43
-
44
- def without_access_control(&block)
45
- previous_state = Authorization.ignore_access_control
46
- begin
47
- Authorization.ignore_access_control(true)
48
- yield
49
- ensure
50
- Authorization.ignore_access_control(previous_state)
51
- end
52
- end
53
-
54
- def content_manager?
55
- user_signed_in? && current_user.admin?
56
- end
57
- end
58
- end
59
- end
60
- end
@@ -1,51 +0,0 @@
1
- authorization do
2
- role :guest do
3
- has_permission_on :users, :to => [:create, :update]
4
- has_permission_on :accounts, :to => [:show, :create]
5
- has_permission_on :comments, :to => [:read, :create]
6
- end
7
-
8
- role :default do
9
- has_permission_on :accounts, :to => [:show]
10
- has_permission_on :accounts, :to => [:update] do
11
- if_attribute :id => is {user.id}
12
- end
13
-
14
- has_permission_on :users, :to => [:update] do
15
- if_attribute :id => is {user.id}
16
- end
17
-
18
- has_permission_on :comments, :to => [:read, :create]
19
- has_permission_on :comments, :to => [:update, :delete] do
20
- if_attribute :author => is {user}
21
- end
22
- end
23
-
24
- role :admin do
25
- # Models
26
- has_permission_on :users, :to => :manage
27
- has_permission_on :comments, :to => :manage
28
- has_permission_on :accounts, :to => :manage
29
-
30
- # Administration module
31
- has_permission_on :manage_structures, :to => :manage
32
- has_permission_on :manage_users, :to => [:manage, :activate]
33
- has_permission_on :manage_pages, :to => :manage
34
- has_permission_on :manage_pictures, :to => :manage
35
- has_permission_on :manage_assets, :to => :manage
36
- has_permission_on :manage_posts, :to => :manage
37
- has_permission_on :manage_settings, :to => :manage
38
-
39
- has_permission_on :authorization_rules, :to => :read
40
- has_permission_on :authorization_usages, :to => :read
41
- end
42
- end
43
-
44
- privileges do
45
- # default privilege hierarchies to facilitate RESTful Rails apps
46
- privilege :manage, :includes => [:create, :read, :update, :delete]
47
- privilege :read, :includes => [:index, :show]
48
- privilege :create, :includes => :new
49
- privilege :update, :includes => :edit
50
- privilege :delete, :includes => :destroy
51
- end