acts_as_privilege 1.2.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm ruby-1.9.2@acts_as_privilege
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source "http://rubygems.org"
2
+
3
+ case ENV["MODEL_ADAPTER"]
4
+ when nil, "active_record"
5
+ gem "sqlite3"
6
+ gem "activerecord", :require => "active_record"
7
+ else
8
+ raise "Unknown model adapter: #{ENV["MODEL_ADAPTER"]}"
9
+ end
10
+
11
+ gemspec
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Cyril Wack
1
+ Copyright (c) 2009-2011 Cyril Wack
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
data/README.rdoc CHANGED
@@ -1,48 +1,63 @@
1
1
  = Acts as privilege
2
2
 
3
- "Acts as" extension which provides the capabilities to restrict system access to authorized users. This ACL-based security model is designed as a role-based access control, where each role can be a group of users.
3
+ Acts as privilege is a plugin for Ruby on Rails that provides the capabilities
4
+ to restrict controller actions to privileged resources.
4
5
 
5
- == Install
6
+ This ACL-based security model is designed as a role-based access control, where
7
+ each role can be a group of users.
6
8
 
7
- To install as a plugin:
9
+ == Philosophy
8
10
 
9
- script/plugin install git://github.com/cyril/acts_as_privilege.git
11
+ General library that does only one thing, without any feature.
10
12
 
11
- Generate and apply the migration:
13
+ == Installation
12
14
 
13
- script/generate acts_as_privilege model
15
+ Include the gem in your <tt>Gemfile</tt>:
16
+
17
+ gem 'acts_as_privilege'
18
+
19
+ And run the +bundle+ command. Or as a plugin:
20
+
21
+ rails plugin install git://github.com/cyril/acts_as_privilege.git
22
+
23
+ Then, generate files and apply the migration:
24
+
25
+ rails generate privileges model
14
26
  rake db:migrate
15
27
 
16
- Then you can populate Ability and Entity models using something like that:
28
+ At this point, <tt>Privilege</tt> model can be populated with:
17
29
 
18
- rest_actions = %w[index show new create edit update destroy]
30
+ rest_actions = %w(index show new create edit update destroy)
19
31
  controllers = {
20
- :groups => rest_actions,
21
- :users => rest_actions,
32
+ :groups => rest_actions,
33
+ :users => rest_actions,
22
34
  :articles => rest_actions,
23
35
  :comments => rest_actions }
24
36
 
25
- controllers.each_pair do |controller, actions|
26
- entity = Entity.create(:name => controller.to_s)
27
- actions.each do |action|
28
- Ability.create(:name => action, :entity_id => entity.id)
37
+ Privilege.transaction do
38
+ controllers.each_pair do |controller, actions|
39
+ actions.each do |action|
40
+ Privilege.create! :route => [controller, action].join('#')
41
+ end
29
42
  end
30
43
  end
31
44
 
32
45
  == Example
33
46
 
34
- script/generate acts_as_privilege Group
47
+ rails generate privileges group
35
48
  rake db:migrate
36
49
 
50
+ # app/models/group.rb
37
51
  class Group < ActiveRecord::Base
38
52
  acts_as_privilege
53
+
39
54
  has_many :users
40
55
  end
41
56
 
42
57
  # Check the current user capability to destroy articles:
43
- current_user.group.has_privilege?('articles', 'destroy')
58
+ current_user.group.privilege?('articles#destroy') # => false
44
59
 
45
- # Form helper that generate field to manage group privileges:
46
- <%= privileges_field(@group, :group) %>
60
+ # Form helper that generates field to manage group privileges:
61
+ <%= privileges_field f %>
47
62
 
48
- Copyright (c) 2009 Cyril Wack, released under the MIT license
63
+ Copyright (c) 2009-2011 Cyril Wack, released under the MIT license
data/Rakefile CHANGED
@@ -1,12 +1,12 @@
1
- require 'rubygems'
2
- require 'rake'
3
- require 'echoe'
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
4
3
 
5
- Echoe.new('acts_as_privilege', '1.2.0') do |p|
6
- p.description = "Simple Rails plugin to restrict system access to authorized users."
7
- p.url = "http://github.com/cyril/acts_as_privilege"
8
- p.author = "Cyril Wack"
9
- p.email = "cyril.wack@gmail.com"
10
- p.ignore_pattern = ["tmp/*", "script/*"]
11
- p.development_dependencies = []
4
+ require 'rake/testtask'
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << 'lib'
8
+ t.libs << 'test'
9
+ t.test_files = FileList["test/**/*_{helper,test}.rb"]
12
10
  end
11
+
12
+ task :default => :test
data/VERSION.yml CHANGED
@@ -1,4 +1,4 @@
1
1
  ---
2
- :major: 1
3
- :minor: 2
2
+ :major: 2
3
+ :minor: 0
4
4
  :patch: 0
@@ -1,32 +1,18 @@
1
- # -*- encoding: utf-8 -*-
2
-
3
1
  Gem::Specification.new do |s|
4
- s.name = %q{acts_as_privilege}
5
- s.version = "1.2.0"
6
-
7
- s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
- s.authors = ["Cyril Wack"]
9
- s.cert_chain = ["/Users/cyril/gem-public_cert.pem"]
10
- s.date = %q{2010-04-12}
2
+ s.name = "acts_as_privilege"
3
+ s.version = Psych.load_file("VERSION.yml").values.join('.')
4
+ s.platform = Gem::Platform::RUBY
5
+ s.authors = ["Cyril Wack"]
6
+ s.email = ["cyril@gosu.fr"]
7
+ s.homepage = "http://github.com/cyril/acts_as_privilege"
8
+ s.summary = %q{Simple privilege solution for Rails.}
11
9
  s.description = %q{Simple Rails plugin to restrict system access to authorized users.}
12
- s.email = %q{cyril.wack@gmail.com}
13
- s.extra_rdoc_files = ["README.rdoc", "lib/ability.rb", "lib/acts_as_privilege.rb", "lib/entity.rb", "lib/privileges_helper.rb"]
14
- s.files = ["MIT-LICENSE", "README.rdoc", "Rakefile", "VERSION.yml", "generators/acts_as_privilege/USAGE", "generators/acts_as_privilege/acts_as_privilege_generator.rb", "generators/acts_as_privilege/templates/migration.rb", "init.rb", "lib/ability.rb", "lib/acts_as_privilege.rb", "lib/entity.rb", "lib/privileges_helper.rb", "Manifest", "acts_as_privilege.gemspec"]
15
- s.homepage = %q{http://github.com/cyril/acts_as_privilege}
16
- s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Acts_as_privilege", "--main", "README.rdoc"]
17
- s.require_paths = ["lib"]
18
- s.rubyforge_project = %q{acts_as_privilege}
19
- s.rubygems_version = %q{1.3.6}
20
- s.signing_key = %q{/Users/cyril/gem-private_key.pem}
21
- s.summary = %q{Simple Rails plugin to restrict system access to authorized users.}
22
10
 
23
- if s.respond_to? :specification_version then
24
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
- s.specification_version = 3
11
+ s.rubyforge_project = "acts_as_privilege"
26
12
 
27
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
- else
29
- end
30
- else
31
- end
13
+ s.add_runtime_dependency "railties", ">= 3.0.0"
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.require_paths = ["lib"]
32
18
  end
@@ -0,0 +1,5 @@
1
+ module PrivilegesHelper
2
+ def privileges_field(resource)
3
+ render 'acts_as_privilege/fieldset', :resource => resource
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ <%= content_tag(:fieldset, :id => "#{f.object.class.name}_privileges") do %>
2
+ <%= content_tag(:legend, t('.legend')) %>
3
+
4
+ <%= label f.object.class.name, :privilege_ids, t('.privilege_ids') %><br />
5
+ <%= collection_select(f.object.class.name.tableize.singularize,
6
+ :privilege_ids, Privilege.all, :id, :route, {}, :multiple => true) %>
7
+ <% end %>
@@ -0,0 +1,5 @@
1
+ en:
2
+ acts_as_privilege:
3
+ fieldset:
4
+ legend: "Privileges"
5
+ privilege_ids: "Privileges listing"
@@ -0,0 +1,5 @@
1
+ fr:
2
+ acts_as_privilege:
3
+ fieldset:
4
+ legend: "Privilèges"
5
+ privilege_ids: "Liste de privilèges"
@@ -0,0 +1,5 @@
1
+ ja:
2
+ acts_as_privilege:
3
+ fieldset:
4
+ legend: "特典"
5
+ privilege_ids: "特典のリスト"
@@ -1,31 +1,25 @@
1
- require 'active_record/base'
2
-
3
1
  module ActsAsPrivilege
4
- def self.included(base)
5
- base.extend(ClassMethods)
2
+ def privilege?(route)
3
+ privileges.exists?(:route => route.to_s)
6
4
  end
7
5
 
8
- module ClassMethods
9
- def acts_as_privilege
10
- has_and_belongs_to_many :abilities
6
+ def has_privilege?(controller, action)
7
+ ActiveSupport::Deprecation.warn 'has_privilege?(controller, action) ' +
8
+ 'is deprecated and may be removed from future releases, ' +
9
+ 'use privilege?(route) instead.'
11
10
 
12
- class_eval <<-EOV
13
- include ActsAsPrivilege::InstanceMethods
14
- EOV
15
- end
11
+ privilege? [controller, action].join('#')
16
12
  end
17
13
 
18
- module InstanceMethods
19
- def has_privilege?(controller, action)
20
- self.abilities.each do |ability|
21
- if ability.name == action
22
- return true if ability.entity.name == controller
23
- end
24
- end
25
- false
26
- end
14
+ def mass_assignment_authorizer
15
+ super + [:privilege_ids]
27
16
  end
28
17
  end
29
18
 
30
- ActiveRecord::Base.class_eval { include ActsAsPrivilege }
31
- ActionController::Base.helper PrivilegesHelper
19
+ class ActiveRecord::Base
20
+ def self.acts_as_privilege
21
+ has_and_belongs_to_many :privileges
22
+
23
+ include ActsAsPrivilege
24
+ end
25
+ end
@@ -0,0 +1,16 @@
1
+ Description:
2
+ Creates a Privilege model, and then links it with any other models that your
3
+ application might need.
4
+
5
+ Usage:
6
+ Pass the name of models that you want to apply privileges.
7
+
8
+ Examples:
9
+ `rails generate privileges role`
10
+
11
+ Will expand roles with privileges. Then you can manage user roles and
12
+ attributed privileges for each one.
13
+
14
+ `rails generate privileges group user`
15
+
16
+ Same, with Group and User models.
@@ -0,0 +1,18 @@
1
+ require 'rails/generators/migration'
2
+
3
+ class PrivilegesGenerator < Rails::Generators::Base
4
+ include Rails::Generators::Migration
5
+
6
+ source_root File.expand_path('../templates', __FILE__)
7
+ argument :model_names, :type => :array
8
+
9
+ def self.next_migration_number(path)
10
+ Time.now.utc.strftime("%Y%m%d%H%M%S")
11
+ end
12
+
13
+ def create_model_file
14
+ template 'privilege.rb', 'app/models/privilege.rb'
15
+ template 'privileges_helper.rb', 'app/helpers/privileges_helper.rb'
16
+ migration_template 'create_privileges.rb', 'db/migrate/create_privileges.rb'
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ class CreatePrivileges < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :privileges do |t|
4
+ t.string :route, :limit => 255, :null => false
5
+ end
6
+
7
+ add_index :privileges, :route, {:unique => true}
8
+
9
+ <% model_names.each do |model_name| %>
10
+ create_table <%= ['privileges', model_name.tableize].sort.join('_').to_sym.inspect %>, :id => false, :force => true do |t|
11
+ t.integer :privilege_id, :null => false
12
+ t.integer <%= model_name.classify.foreign_key.to_sym.inspect %>, :null => false
13
+ end
14
+ <% end %>
15
+ end
16
+
17
+ def self.down
18
+ <% model_names.each do |model_name| %>
19
+ drop_table <%= ['privileges', model_name.tableize].sort.join('_').to_sym.inspect %>
20
+ <% end %>
21
+ drop_table :privileges
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ class Privilege < ActiveRecord::Base
2
+ attr_accessible :route
3
+ attr_readonly :route
4
+
5
+ has_and_belongs_to_many <%=
6
+ model_names.map {|m| m.tableize.to_sym.inspect }.join(', ') %>
7
+
8
+ validates_format_of :route, :with => /^[^#]+#[^#]+$/
9
+ validates_uniqueness_of :route, :on => :create
10
+ end
@@ -0,0 +1,5 @@
1
+ module PrivilegesHelper
2
+ def privileges_field(f)
3
+ render 'acts_as_privilege/fieldset', :f => f
4
+ end
5
+ end
@@ -0,0 +1,161 @@
1
+ require 'test_helper'
2
+
3
+ ActiveRecord::Base.establish_connection(
4
+ :adapter => 'sqlite3', :database => ':memory:')
5
+
6
+ def setup_db
7
+ ActiveRecord::Schema.define(:version => 1) do
8
+ create_table :users do |t|
9
+ t.string :login
10
+ end
11
+
12
+ create_table :blogs do |t|
13
+ t.references :user, :null => false
14
+ t.string :title
15
+ end
16
+
17
+ create_table :categories do |t|
18
+ t.references :blog, :null => false
19
+ t.string :title
20
+ end
21
+
22
+ create_table :articles do |t|
23
+ t.references :publishable, :polymorphic => true, :null => false
24
+ t.references :user
25
+ t.string :title
26
+ t.text :content
27
+ end
28
+
29
+ create_table :comments do |t|
30
+ t.references :article, :null => false
31
+ t.references :user
32
+ t.text :content
33
+ end
34
+
35
+ create_table :privileges do |t|
36
+ t.string :route, :limit => 255, :null => false
37
+ end
38
+
39
+ add_index :privileges, :route, {:unique => true}
40
+
41
+ create_table :privileges_users, :id => false, :force => true do |t|
42
+ t.integer :privilege_id, :null => false
43
+ t.integer :user_id, :null => false
44
+ end
45
+ end
46
+ end
47
+
48
+ def seed_privileges
49
+ rest_actions = %w(index show new create edit update destroy)
50
+ controllers = {
51
+ :users => rest_actions,
52
+ :blogs => rest_actions,
53
+ :categories => rest_actions,
54
+ :articles => rest_actions,
55
+ :comments => rest_actions }
56
+
57
+ controllers.each_pair do |controller, actions|
58
+ actions.each do |action|
59
+ Privilege.create! :route => [controller, action].join('#')
60
+ end
61
+ end
62
+ end
63
+
64
+ def teardown_db
65
+ ActiveRecord::Base.connection.tables.each do |table|
66
+ ActiveRecord::Base.connection.drop_table(table)
67
+ end
68
+ end
69
+
70
+ class User < ActiveRecord::Base
71
+ acts_as_privilege
72
+
73
+ has_one :blog, :dependent => :destroy
74
+ has_many :articles, :dependent => :destroy
75
+ has_many :comments, :dependent => :destroy
76
+ end
77
+
78
+ class Blog < ActiveRecord::Base
79
+ belongs_to :user
80
+ has_many :articles, :as => :publishable, :dependent => :destroy
81
+ has_many :categories, :dependent => :destroy
82
+ end
83
+
84
+ class Category < ActiveRecord::Base
85
+ belongs_to :blog
86
+ has_many :articles, :as => :publishable, :dependent => :destroy
87
+ end
88
+
89
+ class Article < ActiveRecord::Base
90
+ belongs_to :publishable, :polymorphic => true
91
+ belongs_to :user
92
+ has_many :comments, :dependent => :destroy
93
+ end
94
+
95
+ class Comment < ActiveRecord::Base
96
+ belongs_to :article
97
+ belongs_to :user
98
+ end
99
+
100
+ class Privilege < ActiveRecord::Base
101
+ attr_accessible :route
102
+ attr_readonly :route
103
+
104
+ has_and_belongs_to_many :users
105
+
106
+ validates_format_of :route, :with => /^[^#]+#[^#]+$/
107
+ validates_uniqueness_of :route, :on => :create
108
+ end
109
+
110
+ class PrivilegeTest < MiniTest::Unit::TestCase
111
+ def setup
112
+ setup_db
113
+
114
+ @admin = User.create! :login => 'admin'
115
+ @bob = User.create! :login => 'bob'
116
+ @spammer = User.create! :login => 'spammer'
117
+
118
+ @blog = @admin.create_blog :title => 'my_blog'
119
+ @category = @blog.categories.create! :title => 'main'
120
+ @article = @category.articles.create! :title => 'hello, world',
121
+ :user => @admin
122
+ @comment0 = @article.comments.create! :content => 'foobar',
123
+ :user => @bob
124
+ @comment1 = @article.comments.create! :content => 'spam spam spam',
125
+ :user => @spammer
126
+
127
+ seed_privileges
128
+
129
+ @admin.update_attribute :privilege_ids, Privilege.all.map(&:id)
130
+
131
+ default_privileges = %w(index show).inject([]) do |privileges, action|
132
+ privileges << Privilege.where(['route LIKE ?', "%##{action}"]).map(&:id)
133
+ end
134
+
135
+ default_privileges.flatten!
136
+
137
+ [@bob, @spammer].each do |user|
138
+ user.update_attribute :privilege_ids, default_privileges
139
+ end
140
+
141
+ %w(new create).each do |action|
142
+ @bob.privileges << Privilege.first(:conditions => {
143
+ :route => "comments##{action}" })
144
+ end
145
+ end
146
+
147
+ def teardown
148
+ teardown_db
149
+ end
150
+
151
+ def test_privileges
152
+ refute @admin.privilege?('silk_routes#index')
153
+ refute @admin.privilege?('silk_routes#show')
154
+ assert @admin.has_privilege?('blogs', 'destroy')
155
+ assert @admin.privilege?('articles#create')
156
+ refute @bob.privilege?('articles#create')
157
+ assert @bob.privilege?(:"comments#create")
158
+ refute @spammer.privilege?('comments#create')
159
+ assert @spammer.privilege?('comments#show')
160
+ end
161
+ end
@@ -0,0 +1,4 @@
1
+ require 'minitest/autorun'
2
+ require 'sqlite3'
3
+ require 'active_record'
4
+ require 'acts_as_privilege'
metadata CHANGED
@@ -1,106 +1,80 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: acts_as_privilege
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 2
8
- - 0
9
- version: 1.2.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Cyril Wack
13
9
  autorequire:
14
10
  bindir: bin
15
- cert_chain:
16
- - |
17
- -----BEGIN CERTIFICATE-----
18
- MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMRMwEQYDVQQDDApjeXJp
19
- bC53YWNrMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNj
20
- b20wHhcNMTAwNDExMjI1OTI4WhcNMTEwNDExMjI1OTI4WjBBMRMwEQYDVQQDDApj
21
- eXJpbC53YWNrMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZ
22
- FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGJFqPSXGYdS6t
23
- t+kXyFuLg7uIbQHToLhdbfpu5j7dl65EWAspRI37ZE/FIFosmwQ0DAGiJ35gVX7K
24
- 5/rj745EUW9vijemlNHZjTY40AQAP2avlcMd6DnA7pl/x8dxC9G2dW/IS0nmjH0E
25
- +X7X0BZ8WIY7PBvLsq5ptpGaoaxpmqRjJDANolnODwyBjFWtUqpvOGeUWL24orZ3
26
- xwcW6d1vl8hraZ3UUJtIVXFg85lHclyrP33DYxj5sstgRwovaCPrvUQ6ZZ+hX/iJ
27
- MYaEFZsw74WVD4RLHl1bEz2RQGDgSwfFnOnrQ1gi2SaeqUN7uFThAEbbyiJK+rNL
28
- xapWOFs9AgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
29
- BBSsO/YPzLP2/ZtBKQfWveZNRK3uKDANBgkqhkiG9w0BAQUFAAOCAQEAGaGpPlEc
30
- Z8A7Jtfws1tpdLOlQrQQXfIgBrPvfjO18MxT2BVgnusYcMuJgrY1skbH6RDxhdia
31
- EetICD0kvyGnbK+dHdhRwvmmiqc7ZOaiFb3RNLcW6jduxafH4zgKUeg23KpfJYy3
32
- MOqVgHckM1hMZTWz7nmrXJBAjj/48jFOPrwtTed8kd6KpIjUz4e2oTwT+JIVnryF
33
- sYFesvR4DywbXL88T29gq5biCHsAgbK89DW5DNx1Yg1HNLxCdJurJFrcQQS3XQco
34
- h2svBTlG7Yg1wLZAGkVx4RSkrFujrxpgLsz5bfmdnbiEgKcF9njIOdVO4P4vwyoS
35
- G4VzQZjAGxprTw==
36
- -----END CERTIFICATE-----
37
-
38
- date: 2010-04-12 00:00:00 +02:00
39
- default_executable:
40
- dependencies: []
41
-
11
+ cert_chain: []
12
+ date: 2011-04-23 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: railties
16
+ requirement: &2153144220 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.0.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *2153144220
42
25
  description: Simple Rails plugin to restrict system access to authorized users.
43
- email: cyril.wack@gmail.com
26
+ email:
27
+ - cyril@gosu.fr
44
28
  executables: []
45
-
46
29
  extensions: []
47
-
48
- extra_rdoc_files:
49
- - README.rdoc
50
- - lib/ability.rb
51
- - lib/acts_as_privilege.rb
52
- - lib/entity.rb
53
- - lib/privileges_helper.rb
54
- files:
30
+ extra_rdoc_files: []
31
+ files:
32
+ - .gitignore
33
+ - .rvmrc
34
+ - Gemfile
55
35
  - MIT-LICENSE
56
36
  - README.rdoc
57
37
  - Rakefile
58
38
  - VERSION.yml
59
- - generators/acts_as_privilege/USAGE
60
- - generators/acts_as_privilege/acts_as_privilege_generator.rb
61
- - generators/acts_as_privilege/templates/migration.rb
39
+ - acts_as_privilege.gemspec
40
+ - app/helpers/privileges_helper.rb
41
+ - app/views/acts_as_privilege/_fieldset.html.erb
42
+ - config/locales/en.yml
43
+ - config/locales/fr.yml
44
+ - config/locales/ja.yml
62
45
  - init.rb
63
- - lib/ability.rb
64
46
  - lib/acts_as_privilege.rb
65
- - lib/entity.rb
66
- - lib/privileges_helper.rb
67
- - Manifest
68
- - acts_as_privilege.gemspec
69
- has_rdoc: true
47
+ - lib/generators/privileges/USAGE
48
+ - lib/generators/privileges/privileges_generator.rb
49
+ - lib/generators/privileges/templates/create_privileges.rb
50
+ - lib/generators/privileges/templates/privilege.rb
51
+ - lib/generators/privileges/templates/privileges_helper.rb
52
+ - test/privilege_test.rb
53
+ - test/test_helper.rb
70
54
  homepage: http://github.com/cyril/acts_as_privilege
71
55
  licenses: []
72
-
73
56
  post_install_message:
74
- rdoc_options:
75
- - --line-numbers
76
- - --inline-source
77
- - --title
78
- - Acts_as_privilege
79
- - --main
80
- - README.rdoc
81
- require_paths:
57
+ rdoc_options: []
58
+ require_paths:
82
59
  - lib
83
- required_ruby_version: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- segments:
88
- - 0
89
- version: "0"
90
- required_rubygems_version: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - ">="
93
- - !ruby/object:Gem::Version
94
- segments:
95
- - 1
96
- - 2
97
- version: "1.2"
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
98
72
  requirements: []
99
-
100
73
  rubyforge_project: acts_as_privilege
101
- rubygems_version: 1.3.6
74
+ rubygems_version: 1.7.2
102
75
  signing_key:
103
76
  specification_version: 3
104
- summary: Simple Rails plugin to restrict system access to authorized users.
105
- test_files: []
106
-
77
+ summary: Simple privilege solution for Rails.
78
+ test_files:
79
+ - test/privilege_test.rb
80
+ - test/test_helper.rb
data/Manifest DELETED
@@ -1,13 +0,0 @@
1
- MIT-LICENSE
2
- README.rdoc
3
- Rakefile
4
- VERSION.yml
5
- generators/acts_as_privilege/USAGE
6
- generators/acts_as_privilege/acts_as_privilege_generator.rb
7
- generators/acts_as_privilege/templates/migration.rb
8
- init.rb
9
- lib/ability.rb
10
- lib/acts_as_privilege.rb
11
- lib/entity.rb
12
- lib/privileges_helper.rb
13
- Manifest
@@ -1,17 +0,0 @@
1
- Description:
2
- Creates Entity (representing controllers) and Ability (representing
3
- controller actions) models, and then links them with any roles that your
4
- application users might need.
5
-
6
- Usage:
7
- Pass the name of the model that you want to apply privileges.
8
-
9
- Examples:
10
- script/generate acts_as_privilege Role
11
-
12
- Will expand roles with privileges. Then you can manage user roles
13
- and attributed privileges for each one.
14
-
15
- script/generate acts_as_privilege Group
16
-
17
- Same, with the Group model.
@@ -1,34 +0,0 @@
1
- class ActsAsPrivilegeGenerator < Rails::Generator::NamedBase
2
- def manifest
3
- record do |m|
4
- m.migration_template 'migration.rb', "db/migrate", {:assigns => privileges_local_assigns, :migration_file_name => "create_privileges_for_#{plural_name}"}
5
- end
6
- end
7
-
8
- def class_name
9
- name.camelize
10
- end
11
-
12
- def plural_name
13
- custom_name = class_name.underscore.downcase
14
- custom_name = custom_name.pluralize if ActiveRecord::Base.pluralize_table_names
15
- custom_name
16
- end
17
-
18
- def plural_class_name
19
- plural_name.camelize
20
- end
21
-
22
- def singular_name
23
- class_name.underscore.downcase
24
- end
25
-
26
- private
27
-
28
- def privileges_local_assigns
29
- returning(assigns = {}) do
30
- assigns[:class_name] = "create_privileges_for_#{plural_name}"
31
- assigns[:table_name] = plural_name
32
- end
33
- end
34
- end
@@ -1,28 +0,0 @@
1
- class CreatePrivilegesFor<%= plural_class_name %> < ActiveRecord::Migration
2
- def self.up
3
- create_table :abilities do |t|
4
- t.integer :entity_id, :null => false
5
-
6
- t.string :name, :limit => 255, :null => false
7
- end
8
-
9
- add_index(:abilities, [:entity_id, :name])
10
-
11
- create_table :entities do |t|
12
- t.string :name, :limit => 255, :null => false
13
- end
14
-
15
- add_index(:entities, :name, { :unique => true })
16
-
17
- create_table :<%= ['abilities', plural_name].sort.join('_') %>, :id => false, :force => true do |t|
18
- t.integer :ability_id, :null => false
19
- t.integer :<%= "#{singular_name}_id" %>, :null => false
20
- end
21
- end
22
-
23
- def self.down
24
- drop_table :<%= ['abilities', plural_name].sort.join('_') %>
25
- drop_table :entities
26
- drop_table :abilities
27
- end
28
- end
data/lib/ability.rb DELETED
@@ -1,12 +0,0 @@
1
- class Ability < ActiveRecord::Base
2
- # security
3
- attr_readonly :name, :entity_id
4
-
5
- # relations
6
- belongs_to :entity
7
- has_and_belongs_to_many :groups
8
-
9
- # validates
10
- validates_format_of :name, :with => /^[a-z0-9_]+$/, :allow_nil => false
11
- validates_uniqueness_of :name, :case_sensitive => false, :scope => :entity_id
12
- end
data/lib/entity.rb DELETED
@@ -1,11 +0,0 @@
1
- class Entity < ActiveRecord::Base
2
- # security
3
- attr_readonly :name
4
-
5
- # relations
6
- has_many :abilities, :dependent => :destroy
7
-
8
- # validates
9
- validates_format_of :name, :with => /^[a-z0-9_]+$/, :allow_nil => false
10
- validates_uniqueness_of :name, :case_sensitive => false
11
- end
@@ -1,15 +0,0 @@
1
- module PrivilegesHelper
2
- def privileges_field(resource, object_name = params[:controller].singularize)
3
- content_tag(:fieldset, :id => "#{object_name}_privileges") do
4
- content_tag(:legend, "Privileges") +
5
- content_tag(:p) do
6
- label(object_name, :ability_ids) +
7
- tag('br') + "\n" +
8
- select(object_name, "ability_ids",
9
- option_groups_from_collection_for_select(Entity.all, :abilities,
10
- :name, :id, :name, resource.abilities.collect { |ability| ability.id }),
11
- {}, {:multiple => 'multiple'})
12
- end
13
- end
14
- end
15
- end
data.tar.gz.sig DELETED
@@ -1,2 +0,0 @@
1
- ����cp�#]罒D[H�oT-��ㅎp�2�����o�lw��蒤b�R.�NW���;'�k�ݜ
2
- a���:p�k��XJ� ��˙{8g+�L��F�z&��m ������Q�?�%YgV���y͙Z��n��A5����7��@Ahl?�����t����Ly++� ��g�%U�R��>�Y��#?��@�P�e��q�G<�E�t@F�����]7 <�e��2�����s��)#���i��+�zn
metadata.gz.sig DELETED
Binary file