acts_as_authoritah 1.0.3 → 1.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/README.rdoc +103 -5
- data/acts_as_authoritah.gemspec +1 -1
- data/lib/acts_as_authoritah.rb +1 -0
- data/test/acts_as_authoritah_test.rb +1 -1
- data/test/test_helper.rb +2 -2
- metadata +8 -24
data/README.rdoc
CHANGED
@@ -1,13 +1,111 @@
|
|
1
1
|
= acts_as_authoritah
|
2
2
|
|
3
|
-
|
4
|
-
require 'acts_as_authoritah'
|
3
|
+
INSTALLATION
|
5
4
|
|
6
|
-
|
5
|
+
gem install acts_as_authoritah
|
7
6
|
|
8
|
-
|
7
|
+
Rails 2.*
|
8
|
+
Add in environemnt.rb
|
9
|
+
config.gem 'acts_as_authoritah'
|
9
10
|
|
10
|
-
|
11
|
+
Rails 3.*
|
12
|
+
Add in Gemfile
|
13
|
+
gem 'acts_as_authoritah'
|
14
|
+
|
15
|
+
= A sample blogging app.
|
16
|
+
|
17
|
+
- Creating blog posts.
|
18
|
+
- Editing blog posts.
|
19
|
+
- Commenting on blog posts.
|
20
|
+
|
21
|
+
A blog post when first created will be in unpublished state. The post can be published later.
|
22
|
+
|
23
|
+
User Roles and capabilities.
|
24
|
+
|
25
|
+
- Author
|
26
|
+
He can create blog posts
|
27
|
+
He can edit posts
|
28
|
+
He can view blog posts
|
29
|
+
He cannot add comments
|
30
|
+
- Registered user (who has signed up and logged-in)
|
31
|
+
He can view blog posts
|
32
|
+
He can comment on blog posts
|
33
|
+
He cannot create blog posts
|
34
|
+
He cannot edit blog posts
|
35
|
+
- anonymous user
|
36
|
+
He can view blog posts
|
37
|
+
He cannot add comments
|
38
|
+
He cannot create blog posts
|
39
|
+
He cannot edit blog posts
|
40
|
+
- admin
|
41
|
+
unrestricted access to everything.
|
42
|
+
|
43
|
+
|
44
|
+
When post is unpublished
|
45
|
+
|
46
|
+
- Logged-in user (who has signed up)
|
47
|
+
He cannot comment on blog posts
|
48
|
+
He cannot view blog posts.
|
49
|
+
|
50
|
+
|
51
|
+
= Getting this done with ActsAsAuthoritah
|
52
|
+
|
53
|
+
1. Create an excel sheet (or download a sample https://github.com/bangthetable/acts_as_authoritah/blob/master/sample/default.xls)
|
54
|
+
and save it at config/acl/default.xls. When the post is unpublished, there are two rules which are different from the default set of rules.
|
55
|
+
We need to add these two rules alone in config/acl/unpublished.xls https://github.com/bangthetable/acts_as_authoritah/blob/master/sample/unpublished.xls
|
56
|
+
|
57
|
+
2. Add the following line to your User model (or to whichever is your equivalent of User model)
|
58
|
+
|
59
|
+
acts_as_authoritah :acl_folder => File.join(RAILS_ROOT,"config","acl")
|
60
|
+
|
61
|
+
3. Add 'include ActsAsAuthoritah' in ApplicationController
|
62
|
+
|
63
|
+
4. ActsAsAuthoritah needs a wrapper around your 'current_user' method (name may differ based on the authentication system you use), to make it return an empty User object when
|
64
|
+
user is not logged in.
|
65
|
+
|
66
|
+
A sample -
|
67
|
+
|
68
|
+
def present_user
|
69
|
+
current_user.to_s == "false" ? User.new : current_user
|
70
|
+
end
|
71
|
+
|
72
|
+
5. In your User model, you need to define a 'usertype' method which should return the role of that user (same as in the first row of the spreadsheet).
|
73
|
+
|
74
|
+
A sample -
|
75
|
+
|
76
|
+
def usertype(args={})
|
77
|
+
return role.name if role
|
78
|
+
return "anonymous" if new_record?
|
79
|
+
return "registered"
|
80
|
+
end
|
81
|
+
|
82
|
+
Implementation of usertype method can vary, based on the role-system you are following. Just make sure it always returns role of the user (string), which should match with the roles
|
83
|
+
specified in the first row of the spreadsheet.
|
84
|
+
|
85
|
+
|
86
|
+
6. in Post model
|
87
|
+
|
88
|
+
def status
|
89
|
+
published? ? nil : 'unpublished'
|
90
|
+
end
|
91
|
+
|
92
|
+
This will be used to let authoritah know when a post in in unpublished state, so that authoritah can override the default rules with those in unpublished.xls
|
93
|
+
|
94
|
+
7. For access control of methods in PostController and CommentController, put these two files in lib/access_control/
|
95
|
+
https://github.com/bangthetable/acts_as_authoritah/blob/master/sample/comment_controller_access.rb
|
96
|
+
https://github.com/bangthetable/acts_as_authoritah/blob/master/sample/post_controller_access.rb
|
97
|
+
|
98
|
+
8. To make sure that links are shown only to appropriate users, add lines like these in in the views.
|
99
|
+
|
100
|
+
<% if present_user.can_post_a_comment?(:context => @post.status) %>
|
101
|
+
<%= link_to 'Add a comment', {:controller => 'comment', :action => 'new', :post_id => @post.id} %>
|
102
|
+
<% end%>
|
103
|
+
|
104
|
+
9. Thats all - your application is access controlled by ActsAsAuthoritah now.
|
105
|
+
|
106
|
+
- You can grant/revoke access to different features to different roles just by editing the spreadsheets.
|
107
|
+
- You can add a new user-role by adding a column in the spreadsheets.
|
108
|
+
- If your application needs to have one more context (say, archived posts), you can do that by adding one more spreadsheet called archived.xls.
|
11
109
|
|
12
110
|
== Note on Patches/Pull Requests
|
13
111
|
|
data/acts_as_authoritah.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{acts_as_authoritah}
|
8
|
-
s.version = "1.0.
|
8
|
+
s.version = "1.0.4"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["BangTheTable","Unnikrishnan KP"]
|
data/lib/acts_as_authoritah.rb
CHANGED
data/test/test_helper.rb
CHANGED
@@ -4,13 +4,13 @@ require 'factory_girl'
|
|
4
4
|
|
5
5
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
6
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
|
-
require 'activerecord_test_connector'
|
8
7
|
require 'acts_as_authoritah'
|
8
|
+
require 'activerecord_test_connector'
|
9
9
|
|
10
10
|
ActiveRecordTestConnector.setup
|
11
11
|
|
12
12
|
#load users factory
|
13
|
-
|
13
|
+
require_relative 'factories/users'
|
14
14
|
|
15
15
|
class Test::Unit::TestCase
|
16
16
|
protected
|
metadata
CHANGED
@@ -1,13 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: acts_as_authoritah
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 1
|
8
|
-
- 0
|
9
|
-
- 3
|
10
|
-
version: 1.0.3
|
4
|
+
version: 1.0.4
|
11
5
|
platform: ruby
|
12
6
|
authors:
|
13
7
|
- BangTheTable
|
@@ -21,18 +15,14 @@ default_executable:
|
|
21
15
|
dependencies:
|
22
16
|
- !ruby/object:Gem::Dependency
|
23
17
|
name: spreadsheet
|
24
|
-
|
25
|
-
|
26
|
-
|
18
|
+
type: :runtime
|
19
|
+
version_requirement:
|
20
|
+
version_requirements: !ruby/object:Gem::Requirement
|
27
21
|
requirements:
|
28
22
|
- - ">="
|
29
23
|
- !ruby/object:Gem::Version
|
30
|
-
hash: 3
|
31
|
-
segments:
|
32
|
-
- 0
|
33
24
|
version: "0"
|
34
|
-
|
35
|
-
version_requirements: *id001
|
25
|
+
version:
|
36
26
|
description: role based access rights for a user specified via spreadsheet
|
37
27
|
email: devteam@bangthetable.com, unni.tallman@gmail.com
|
38
28
|
executables: []
|
@@ -68,27 +58,21 @@ rdoc_options:
|
|
68
58
|
require_paths:
|
69
59
|
- lib
|
70
60
|
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
61
|
requirements:
|
73
62
|
- - ">="
|
74
63
|
- !ruby/object:Gem::Version
|
75
|
-
hash: 3
|
76
|
-
segments:
|
77
|
-
- 0
|
78
64
|
version: "0"
|
65
|
+
version:
|
79
66
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
-
none: false
|
81
67
|
requirements:
|
82
68
|
- - ">="
|
83
69
|
- !ruby/object:Gem::Version
|
84
|
-
hash: 3
|
85
|
-
segments:
|
86
|
-
- 0
|
87
70
|
version: "0"
|
71
|
+
version:
|
88
72
|
requirements: []
|
89
73
|
|
90
74
|
rubyforge_project:
|
91
|
-
rubygems_version: 1.5
|
75
|
+
rubygems_version: 1.3.5
|
92
76
|
signing_key:
|
93
77
|
specification_version: 3
|
94
78
|
summary: role based access rights for a user specified via spreadsheet
|