authentasaurus 0.8.8 → 0.8.9
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELIST +2 -6
- data/TODO +0 -5
- data/app/controllers/areas_controller.rb +1 -1
- data/app/controllers/groups_controller.rb +1 -1
- data/app/controllers/permissions_controller.rb +1 -1
- data/app/controllers/recoveries_controller.rb +1 -1
- data/app/controllers/registrations_controller.rb +1 -1
- data/app/controllers/sessions_controller.rb +2 -2
- data/app/controllers/user_invitations_controller.rb +1 -1
- data/app/controllers/users_controller.rb +1 -1
- data/app/controllers/validations_controller.rb +1 -1
- data/app/models/area.rb +1 -1
- data/app/models/authentasaurus_emailer.rb +6 -6
- data/app/models/group.rb +1 -1
- data/app/models/permission.rb +1 -1
- data/app/models/recovery.rb +1 -1
- data/app/models/user_invitation.rb +1 -1
- data/app/models/validation.rb +1 -1
- data/app/views/authentasaurus_emailer/invitation_mail.html.erb +2 -2
- data/app/views/authentasaurus_emailer/recovery_mail.html.erb +2 -2
- data/app/views/authentasaurus_emailer/validation_mail.html.erb +2 -2
- data/lib/authentasaurus.rb +18 -52
- metadata +2 -136
- data/app/models/authentasaurus_session.rb +0 -3
- data/lib/authentasaurus/ac/acts_as_overrider.rb +0 -48
- data/lib/authentasaurus/ac/controllers/areas_controller.rb +0 -75
- data/lib/authentasaurus/ac/controllers/groups_controller.rb +0 -77
- data/lib/authentasaurus/ac/controllers/permissions_controller.rb +0 -76
- data/lib/authentasaurus/ac/controllers/recoveries_controller.rb +0 -67
- data/lib/authentasaurus/ac/controllers/registrations_controller.rb +0 -40
- data/lib/authentasaurus/ac/controllers/sessions_controller.rb +0 -57
- data/lib/authentasaurus/ac/controllers/user_invitations_controller.rb +0 -45
- data/lib/authentasaurus/ac/controllers/users_controller.rb +0 -75
- data/lib/authentasaurus/ac/controllers/validations_controller.rb +0 -48
- data/lib/authentasaurus/ac/routing.rb +0 -86
- data/lib/authentasaurus/ar/acts_as_authenticatable.rb +0 -107
- data/lib/authentasaurus/ar/acts_as_authenticatable_validatable.rb +0 -35
- data/lib/authentasaurus/ar/acts_as_overrider.rb +0 -49
- data/lib/authentasaurus/ar/authenticatable.rb +0 -64
- data/lib/authentasaurus/ar/migrations.rb +0 -165
- data/lib/authentasaurus/ar/models/recovery.rb +0 -34
- data/lib/authentasaurus/ar/models/session.rb +0 -78
- data/lib/authentasaurus/ar/models/user_invitation.rb +0 -30
- data/lib/authentasaurus/ar/models/validation.rb +0 -27
- data/lib/authentasaurus/arel/acts_as_authenticatable.rb +0 -67
- data/lib/authentasaurus/arel/authenticatable.rb +0 -21
- data/lib/authentasaurus/authorization.rb +0 -344
- data/lib/authentasaurus/configuration.rb +0 -30
- data/lib/authentasaurus/railtie.rb +0 -10
- data/lib/generators/authentasaurus/install/USAGE +0 -5
- data/lib/generators/authentasaurus/install/install_generator.rb +0 -10
- data/lib/generators/authentasaurus/install/templates/authentasaurus_tasks.rake +0 -48
- data/lib/generators/authentasaurus/install/templates/defaults.yml +0 -57
- data/lib/generators/authentasaurus/views/USAGE +0 -13
- data/lib/generators/authentasaurus/views/templates/areas/edit.html.erb +0 -7
- data/lib/generators/authentasaurus/views/templates/areas/index.html.erb +0 -11
- data/lib/generators/authentasaurus/views/templates/areas/new.html.erb +0 -7
- data/lib/generators/authentasaurus/views/templates/areas/show.html.erb +0 -7
- data/lib/generators/authentasaurus/views/templates/authentasaurus_emailer/invitation_mail.html.erb +0 -4
- data/lib/generators/authentasaurus/views/templates/authentasaurus_emailer/recovery_mail.html.erb +0 -7
- data/lib/generators/authentasaurus/views/templates/authentasaurus_emailer/validation_mail.html.erb +0 -6
- data/lib/generators/authentasaurus/views/templates/groups/edit.html.erb +0 -7
- data/lib/generators/authentasaurus/views/templates/groups/index.html.erb +0 -11
- data/lib/generators/authentasaurus/views/templates/groups/new.html.erb +0 -7
- data/lib/generators/authentasaurus/views/templates/groups/show.html.erb +0 -7
- data/lib/generators/authentasaurus/views/templates/permissions/edit.html.erb +0 -19
- data/lib/generators/authentasaurus/views/templates/permissions/index.html.erb +0 -17
- data/lib/generators/authentasaurus/views/templates/permissions/new.html.erb +0 -19
- data/lib/generators/authentasaurus/views/templates/permissions/show.html.erb +0 -7
- data/lib/generators/authentasaurus/views/templates/recoveries/edit.html.erb +0 -24
- data/lib/generators/authentasaurus/views/templates/recoveries/new.html.erb +0 -15
- data/lib/generators/authentasaurus/views/templates/registrations/new.html.erb +0 -21
- data/lib/generators/authentasaurus/views/templates/sessions/new.html.erb +0 -41
- data/lib/generators/authentasaurus/views/templates/sessions/no_access.html.erb +0 -1
- data/lib/generators/authentasaurus/views/templates/user_invitations/index.html.erb +0 -14
- data/lib/generators/authentasaurus/views/templates/user_invitations/new.html.erb +0 -9
- data/lib/generators/authentasaurus/views/templates/users/edit.html.erb +0 -27
- data/lib/generators/authentasaurus/views/templates/users/index.html.erb +0 -19
- data/lib/generators/authentasaurus/views/templates/users/new.html.erb +0 -27
- data/lib/generators/authentasaurus/views/templates/users/show.html.erb +0 -11
- data/lib/generators/authentasaurus/views/templates/validations/resend_validation_email.html.erb +0 -6
- data/lib/generators/authentasaurus/views/templates/validations/validate.html.erb +0 -6
- data/lib/generators/authentasaurus/views/views_generator.rb +0 -76
- data/rdoc/apple-touch-icon.png +0 -0
- data/rdoc/classes/Authentasaurus.html +0 -65
- data/rdoc/classes/Authentasaurus/Ac.html +0 -72
- data/rdoc/classes/Authentasaurus/Ac/ActsAsOverrider.html +0 -104
- data/rdoc/classes/Authentasaurus/Ac/ActsAsOverrider/ClassMethods.html +0 -397
- data/rdoc/classes/Authentasaurus/Ac/Routing.html +0 -61
- data/rdoc/classes/Authentasaurus/Ac/Routing/InstanceMethods.html +0 -390
- data/rdoc/classes/Authentasaurus/Ar.html +0 -77
- data/rdoc/classes/Authentasaurus/Ar/ActsAsAuthenticatable.html +0 -107
- data/rdoc/classes/Authentasaurus/Ar/ActsAsAuthenticatable/ClassMethods.html +0 -168
- data/rdoc/classes/Authentasaurus/Ar/ActsAsAuthenticatable/InstanceMethods.html +0 -357
- data/rdoc/classes/Authentasaurus/Ar/ActsAsAuthenticatableValidatable.html +0 -109
- data/rdoc/classes/Authentasaurus/Ar/ActsAsAuthenticatableValidatable/ClassMethods.html +0 -113
- data/rdoc/classes/Authentasaurus/Ar/ActsAsAuthenticatableValidatable/InstanceMethods.html +0 -54
- data/rdoc/classes/Authentasaurus/Ar/ActsAsOverrider.html +0 -104
- data/rdoc/classes/Authentasaurus/Ar/ActsAsOverrider/ClassMethods.html +0 -320
- data/rdoc/classes/Authentasaurus/Ar/Authenticatable.html +0 -104
- data/rdoc/classes/Authentasaurus/Ar/Authenticatable/ClassMethods.html +0 -182
- data/rdoc/classes/Authentasaurus/Ar/Migrations.html +0 -63
- data/rdoc/classes/Authentasaurus/Ar/Migrations/Columns.html +0 -68
- data/rdoc/classes/Authentasaurus/Ar/Migrations/Columns/InstanceMethods.html +0 -106
- data/rdoc/classes/Authentasaurus/Ar/Migrations/Tables.html +0 -68
- data/rdoc/classes/Authentasaurus/Ar/Migrations/Tables/InstanceMethods.html +0 -703
- data/rdoc/classes/Authentasaurus/Arel.html +0 -65
- data/rdoc/classes/Authentasaurus/Arel/ActsAsAuthenticatable.html +0 -107
- data/rdoc/classes/Authentasaurus/Arel/ActsAsAuthenticatable/ClassMethods.html +0 -139
- data/rdoc/classes/Authentasaurus/Arel/ActsAsAuthenticatable/InstanceMethods.html +0 -113
- data/rdoc/classes/Authentasaurus/Arel/Authenticatable.html +0 -105
- data/rdoc/classes/Authentasaurus/Arel/Authenticatable/ClassMethods.html +0 -119
- data/rdoc/classes/Authentasaurus/Authorization.html +0 -230
- data/rdoc/classes/Authentasaurus/Authorization/ActionController.html +0 -63
- data/rdoc/classes/Authentasaurus/Authorization/ActionController/ClassMethods.html +0 -263
- data/rdoc/classes/Authentasaurus/Authorization/ActionController/InstanceMethods.html +0 -54
- data/rdoc/classes/Authentasaurus/Authorization/ActionView.html +0 -54
- data/rdoc/classes/Authentasaurus/Authorization/CommonInstanceMethods.html +0 -240
- data/rdoc/created.rid +0 -1
- data/rdoc/css/main.css +0 -278
- data/rdoc/css/panel.css +0 -383
- data/rdoc/css/reset.css +0 -53
- data/rdoc/favicon.ico +0 -0
- data/rdoc/files/README_rdoc.html +0 -366
- data/rdoc/files/TODO.html +0 -64
- data/rdoc/files/lib/authentasaurus/ac/acts_as_overrider_rb.html +0 -52
- data/rdoc/files/lib/authentasaurus/ac/routing_rb.html +0 -60
- data/rdoc/files/lib/authentasaurus/ar/acts_as_authenticatable_rb.html +0 -52
- data/rdoc/files/lib/authentasaurus/ar/acts_as_authenticatable_validatable_rb.html +0 -52
- data/rdoc/files/lib/authentasaurus/ar/acts_as_overrider_rb.html +0 -52
- data/rdoc/files/lib/authentasaurus/ar/authenticatable_rb.html +0 -52
- data/rdoc/files/lib/authentasaurus/ar/migrations_rb.html +0 -52
- data/rdoc/files/lib/authentasaurus/arel/acts_as_authenticatable_rb.html +0 -52
- data/rdoc/files/lib/authentasaurus/arel/authenticatable_rb.html +0 -72
- data/rdoc/files/lib/authentasaurus/authorization_rb.html +0 -208
- data/rdoc/i/arrows.png +0 -0
- data/rdoc/i/results_bg.png +0 -0
- data/rdoc/i/tree_bg.png +0 -0
- data/rdoc/index.html +0 -15
- data/rdoc/js/jquery-1.3.2.min.js +0 -19
- data/rdoc/js/jquery-effect.js +0 -593
- data/rdoc/js/main.js +0 -22
- data/rdoc/js/searchdoc.js +0 -628
- data/rdoc/panel/index.html +0 -71
- data/rdoc/panel/search_index.js +0 -1
- data/rdoc/panel/tree.js +0 -1
@@ -1,34 +0,0 @@
|
|
1
|
-
module Authentasaurus::Ar::Models
|
2
|
-
module Recovery
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
included do
|
6
|
-
require "digest/sha1"
|
7
|
-
|
8
|
-
unloadable
|
9
|
-
|
10
|
-
belongs_to :user
|
11
|
-
|
12
|
-
before_validation :make_token!, :on => :create
|
13
|
-
before_save :send_recovery
|
14
|
-
|
15
|
-
scope :valid, lambda { { :conditions => ["updated_at <= ?", Authentasaurus::Configuration.instance.configuration[:modules][:recoverable][:token_expires_after].days.from_now] } }
|
16
|
-
|
17
|
-
validates_uniqueness_of :user_id
|
18
|
-
validates_presence_of :email
|
19
|
-
validates_presence_of :user_id, :message => :"recovery.user_id.blank"
|
20
|
-
validates_format_of :email, :with => %r{[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}}
|
21
|
-
end
|
22
|
-
|
23
|
-
module ClassMethods
|
24
|
-
end
|
25
|
-
|
26
|
-
def make_token!
|
27
|
-
self.token = Digest::SHA1.hexdigest "#{Time.now.to_i} #{rand} #{self.email}"
|
28
|
-
end
|
29
|
-
|
30
|
-
def send_recovery
|
31
|
-
AuthentasaurusEmailer.deliver_recovery_mail(self.user, self.token) if Authentasaurus::Configuration.instance.configuration[:modules][:recoverable][:send_email]
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
# This class represents a session model, a session authenticates a username and a password.
|
2
|
-
#
|
3
|
-
# A session behaves just like an ActiveRecord model
|
4
|
-
module Authentasaurus::Ar::Models
|
5
|
-
module Session
|
6
|
-
extend ActiveSupport::Concern
|
7
|
-
|
8
|
-
included do # :nodoc:
|
9
|
-
include ActiveModel::Validations
|
10
|
-
include ActiveModel::Conversion
|
11
|
-
|
12
|
-
attr_accessor :username, :password, :remember
|
13
|
-
validates_presence_of :username, :password
|
14
|
-
|
15
|
-
attr_reader :user
|
16
|
-
end
|
17
|
-
|
18
|
-
module ClassMethods
|
19
|
-
# Takes a hash of attributes keys and values just like new and authenticates the information.
|
20
|
-
# Returns true or false
|
21
|
-
def create(*attrs)
|
22
|
-
attributes = attrs.extract_options!
|
23
|
-
attrs = attrs.flatten
|
24
|
-
self_obj = self.new attributes
|
25
|
-
self_obj.save(attrs)
|
26
|
-
return self_obj
|
27
|
-
end
|
28
|
-
|
29
|
-
# Takes an id (usually from an ActiveController session) and returns a User object
|
30
|
-
def current_user(id, session_type = Authentasaurus::Configuration.instance.user_model.to_sym)
|
31
|
-
session_type.to_s.camelize.constantize.find id
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# Takes a hash of attributes keys and values just like ActiveRecord models
|
36
|
-
def initialize(attributes = nil)
|
37
|
-
if attributes
|
38
|
-
attributes.each do |key,value|
|
39
|
-
send(key.to_s + '=', value)
|
40
|
-
end
|
41
|
-
else
|
42
|
-
self.remember = false
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
# Authenticates the information saved in the attributes
|
47
|
-
# Returns true or false
|
48
|
-
def save(*session_types)
|
49
|
-
session_types = session_types.flatten
|
50
|
-
|
51
|
-
if session_types.empty?
|
52
|
-
user_model = Authentasaurus::Configuration.instance.user_model.to_sym
|
53
|
-
session_types = [user_model]
|
54
|
-
end
|
55
|
-
|
56
|
-
ret = true
|
57
|
-
session_types.each do |type|
|
58
|
-
@user = type.to_s.camelize.constantize.authenticate(self.username.downcase, self.password, self.remember == "1")
|
59
|
-
if @user.nil?
|
60
|
-
self.errors.add_to_base I18n.t(:invalid_login, :scope => [:authentasaurus, :messages, :sessions])
|
61
|
-
ret &= false
|
62
|
-
else
|
63
|
-
ret = true
|
64
|
-
break
|
65
|
-
end
|
66
|
-
end
|
67
|
-
ret
|
68
|
-
end
|
69
|
-
|
70
|
-
def new_record? #:nodoc:
|
71
|
-
true
|
72
|
-
end
|
73
|
-
|
74
|
-
def persisted? #:nodoc:
|
75
|
-
false
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
@@ -1,30 +0,0 @@
|
|
1
|
-
module Authentasaurus::Ar::Models
|
2
|
-
module UserInvitation
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
included do
|
6
|
-
require 'digest/sha2'
|
7
|
-
validates_presence_of :email
|
8
|
-
validates_uniqueness_of :email, :scope => :token
|
9
|
-
validates_format_of :email, :with => %r{[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}}
|
10
|
-
|
11
|
-
before_validation :create_token
|
12
|
-
#send email
|
13
|
-
after_create :send_invitation
|
14
|
-
end
|
15
|
-
|
16
|
-
module ClassMethods
|
17
|
-
end
|
18
|
-
|
19
|
-
def send_invitation
|
20
|
-
AuthentasaurusEmailer.deliver_invitation_mail(self.email, self.token) if Authentasaurus::Configuration.instance.configuration[:modules][:invitable][:send_email]
|
21
|
-
end
|
22
|
-
|
23
|
-
private
|
24
|
-
def create_token
|
25
|
-
return if self.email.nil? || self.email.blank?
|
26
|
-
string_to_hash=self.email + "invitable.olation" + self.email.hash.to_s
|
27
|
-
self.token = Digest::SHA2.hexdigest(string_to_hash)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
@@ -1,27 +0,0 @@
|
|
1
|
-
module Authentasaurus::Ar::Models
|
2
|
-
module Validation
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
included do
|
6
|
-
belongs_to :user, :polymorphic => true
|
7
|
-
|
8
|
-
# Check that everything is there
|
9
|
-
validates_presence_of :user_id, :validation_code, :user_type, :email
|
10
|
-
# Check foreign keys
|
11
|
-
validates_associated :user
|
12
|
-
# Check unique user
|
13
|
-
validates_uniqueness_of :user_id, :scope => [:user_type, :email]
|
14
|
-
validates_uniqueness_of :validation_code
|
15
|
-
|
16
|
-
#send email
|
17
|
-
after_create :send_validation
|
18
|
-
end
|
19
|
-
|
20
|
-
module ClassMethods
|
21
|
-
end
|
22
|
-
|
23
|
-
def send_validation
|
24
|
-
AuthentasaurusEmailer.deliver_validation_mail(self.user.name, self.email, self.validation_code) if Authentasaurus::Configuration.instance.configuration[:modules][:validatable][:send_email]
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
@@ -1,67 +0,0 @@
|
|
1
|
-
module Authentasaurus::Arel
|
2
|
-
module ActsAsAuthenticatable
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
module ClassMethods
|
6
|
-
## Authenticates the username and password
|
7
|
-
def authenticate(username, password, remember = false)
|
8
|
-
case(self.format)
|
9
|
-
when ActiveResource::Formats::XmlFormat
|
10
|
-
user = self.new Hash.from_xml(self.post(:signin,:username => username, :password => password, :remember => remember).body).values.first
|
11
|
-
when ActiveResource::Formats::JsonFormat
|
12
|
-
user = self.new ActiveSupport::JSON.decode(self.post(:signin,:username => username, :password => password, :remember => remember).body)
|
13
|
-
else
|
14
|
-
user = self.new Hash.from_xml(self.post(:signin,:username => username, :password => password, :remember => remember).body).values.first
|
15
|
-
end
|
16
|
-
|
17
|
-
unless user.nil?
|
18
|
-
if self.sync && !self.sync_to.nil?
|
19
|
-
last_update = user.attributes.delete "updated_at"
|
20
|
-
local_user = self.sync_to.find_or_initialize_by_username user.username, user.attributes
|
21
|
-
|
22
|
-
unless local_user.new_record?
|
23
|
-
last_update_datetime = (last_update.kind_of?(String)) ? (DateTime.parse(last_update)) : (last_update)
|
24
|
-
|
25
|
-
if local_user.updated_at < last_update_datetime
|
26
|
-
local_user.update_attributes user.attributes
|
27
|
-
end
|
28
|
-
else
|
29
|
-
local_user.password = password
|
30
|
-
local_user.password_confirmation = password
|
31
|
-
|
32
|
-
local_user.hashed_password = user.hashed_password
|
33
|
-
local_user.password_seed = user.password_seed
|
34
|
-
|
35
|
-
self.sync_to.default_data.each do |key,value|
|
36
|
-
local_user.send(key.to_s + '=', value)
|
37
|
-
end
|
38
|
-
|
39
|
-
local_user.save
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
return user
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
def sync
|
48
|
-
if self.class.sync && !self.class.sync_to.nil?
|
49
|
-
user = self.dup
|
50
|
-
last_update = user.attributes.delete "updated_at"
|
51
|
-
local_user = self.class.sync_to.find_or_initialize_by_username user.username, user.attributes
|
52
|
-
|
53
|
-
unless local_user.new_record?
|
54
|
-
local_user.update_attributes user.attributes
|
55
|
-
else
|
56
|
-
self.sync_to.default_data.each do |key,value|
|
57
|
-
local_user.send(key.to_s + '=', value)
|
58
|
-
end
|
59
|
-
|
60
|
-
local_user.save
|
61
|
-
end
|
62
|
-
else
|
63
|
-
false
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module Authentasaurus::Arel
|
2
|
-
module Authenticatable
|
3
|
-
extend ActiveSupport::Concern
|
4
|
-
|
5
|
-
module ClassMethods
|
6
|
-
def authenticatable(*args)
|
7
|
-
self.unloadable
|
8
|
-
options = args.extract_options!
|
9
|
-
|
10
|
-
self.site = options[:site] || Authentasaurus::Configuration.instance.configuration[:modules][:remote][self.name.underscore.gsub(/_sync/, "").to_sym][:site]
|
11
|
-
self.element_name = options[:session_element].try(:to_s) || Authentasaurus::Configuration.instance.configuration[:modules][:remote][self.name.underscore.gsub(/_sync/, "").to_sym][:session_element]
|
12
|
-
self.sync = options[:sync] || Authentasaurus::Configuration.instance.configuration[:modules][:remote][self.name.underscore.gsub(/_sync/, "").to_sym][:sync]
|
13
|
-
self.sync_to = options[:sync_to].try(:to_s).try(:camelize).try(:constantize) || Authentasaurus::Configuration.instance.configuration[:modules][:remote][self.name.underscore.gsub(/_sync/, "").to_sym][:sync_to].camelize.constantize
|
14
|
-
|
15
|
-
|
16
|
-
# include authentication methods
|
17
|
-
include Authentasaurus::Arel::ActsAsAuthenticatable
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
@@ -1,344 +0,0 @@
|
|
1
|
-
# =Authorization Helpers
|
2
|
-
# The authorization module provides helpers for restricting access to your controllers.
|
3
|
-
#
|
4
|
-
# Each controller is considered an area in Authentasaurus, for example UsersController stands for
|
5
|
-
# "users" area. Each area must be defined in the Areas table so Authentasaurus can control access
|
6
|
-
# to it.
|
7
|
-
#
|
8
|
-
# Authentasaurus provides a simple rake task to define areas automatically:
|
9
|
-
#
|
10
|
-
# rake authentasaurus:create_areas
|
11
|
-
#
|
12
|
-
# == Restricting Access
|
13
|
-
# You can restrict access to any controller using one of the following class methods on your
|
14
|
-
# controller.
|
15
|
-
#
|
16
|
-
# At login, Authentasaurus will load the permissions of the group the user belongs to in the session
|
17
|
-
# and will use them to authorize access to the area.
|
18
|
-
#
|
19
|
-
# There are three levels of restriction in Authentasaurus, login, read and write; with the exception
|
20
|
-
# of login, read and write don't have any logic behind them; they are defined using the Permission and
|
21
|
-
# are only symbolically named i.e.: you can use read instead of write and vice versa it only depends on
|
22
|
-
# how you use them.
|
23
|
-
#
|
24
|
-
# === Restricting access to logged in users
|
25
|
-
# You can restrict access to an area to logged in users only using the ActionController::ClassMethods#require_login
|
26
|
-
# class method.
|
27
|
-
#
|
28
|
-
# Consider the following example restricting access to the pages controller to only logged in users:
|
29
|
-
#
|
30
|
-
# class PagesController < ActionController::Base
|
31
|
-
# require_login
|
32
|
-
# ...
|
33
|
-
# end
|
34
|
-
#
|
35
|
-
# You can also specify which actions to restrict:
|
36
|
-
#
|
37
|
-
# require_login :new, :create, :index
|
38
|
-
#
|
39
|
-
# Authentasaurus will automatically redirect users to the sign-in page if they try accessing the area
|
40
|
-
# while they are not logged in. Once the user logs in he/she is redirected back to his/her original destination
|
41
|
-
# unless you explicitly skip that behaviour:
|
42
|
-
#
|
43
|
-
# require_login :skip_request => true
|
44
|
-
#
|
45
|
-
# === Restricting access according to permissions
|
46
|
-
# Unlike the login restriction, permissions restrictions checks if the user is logged in and has
|
47
|
-
# the permission to access the area.
|
48
|
-
#
|
49
|
-
# Users get permissions from their parent group and permissions are dynamically set in the database.
|
50
|
-
#
|
51
|
-
# Authentasaurus currently supports only two permissions, read and write, both permissions are
|
52
|
-
# symbolically named, they have no meaning.
|
53
|
-
#
|
54
|
-
# ==== Restricting access to users with read permission
|
55
|
-
#
|
56
|
-
# class PagesController < ActionController::Base
|
57
|
-
# require_read
|
58
|
-
# ...
|
59
|
-
# end
|
60
|
-
#
|
61
|
-
# ActionController::ClassMethods#require_read takes the same options as ActionController::ClassMethods#require_login
|
62
|
-
# and ActionController::ClassMethods#require_write
|
63
|
-
#
|
64
|
-
# ==== Restricting access to users with write permission
|
65
|
-
#
|
66
|
-
# class PagesController < ActionController::Base
|
67
|
-
# require_write
|
68
|
-
# ...
|
69
|
-
# end
|
70
|
-
#
|
71
|
-
# ActionController::ClassMethods#require_write takes the same options as ActionController::ClassMethods#require_login
|
72
|
-
# and ActionController::ClassMethods#require_read
|
73
|
-
#
|
74
|
-
# == Checking if the user is logged in in actions or views
|
75
|
-
# Along with the class helpers, Authentasaurus includes a helper to check if the user is logged in
|
76
|
-
# inside any of your actions:
|
77
|
-
#
|
78
|
-
# is_logged_in?
|
79
|
-
#
|
80
|
-
# Check ActionController::CommonInstanceMethods#is_logged_in? for more information.
|
81
|
-
#
|
82
|
-
# == Checking permissions in actions or views
|
83
|
-
# You can also check if the logged in user has a certain permission.
|
84
|
-
#
|
85
|
-
# Consider the following example to check if the logged in user has read permission on the current
|
86
|
-
# area
|
87
|
-
#
|
88
|
-
# has?(:read)
|
89
|
-
#
|
90
|
-
# You can also check permissions on an area while in another, for example to check if the current
|
91
|
-
# user has write permission on the users area:
|
92
|
-
#
|
93
|
-
# has?(:write,:users)
|
94
|
-
#
|
95
|
-
# Check ActionController::CommonInstanceMethods#has? for more information.
|
96
|
-
#
|
97
|
-
# == Retrieving the current user in actions or views
|
98
|
-
# To get the logged in user you can use the following helper:
|
99
|
-
#
|
100
|
-
# current_user
|
101
|
-
#
|
102
|
-
# Check ActionController::CommonInstanceMethods#current_user for more information.
|
103
|
-
module Authentasaurus::Authorization
|
104
|
-
module CommonInstanceMethods
|
105
|
-
# Returns an object of the current user
|
106
|
-
#
|
107
|
-
# <b>Parameters:</b>
|
108
|
-
#
|
109
|
-
# user_model - The model class representing a user (User by default)
|
110
|
-
def current_user(user_model = nil)#:doc:
|
111
|
-
user_model = Authentasaurus::Configuration.instance.user_model.camelize.constantize if user_model.nil?
|
112
|
-
return user_model.find session[:user_id] if session[:user_id]
|
113
|
-
end
|
114
|
-
|
115
|
-
# Checks if the current user has the appropriate permission
|
116
|
-
#
|
117
|
-
# <b>ex</b>:
|
118
|
-
# has?(:write) or has?(:read, :users)
|
119
|
-
#
|
120
|
-
# <b>Parameters:</b>
|
121
|
-
#
|
122
|
-
# permission - The permission to check, either :read or :write
|
123
|
-
# area - The area to check the permission on, by default checks the current area.
|
124
|
-
def has?(permission, area = nil) #:doc:
|
125
|
-
return false unless is_logged_in?
|
126
|
-
check = false
|
127
|
-
case permission
|
128
|
-
when :write
|
129
|
-
unless area
|
130
|
-
user_permissions = session[:user_permissions]
|
131
|
-
check = user_permissions[:write].find { |perm| perm==self.controller_name || perm=="all" }
|
132
|
-
else
|
133
|
-
user_permissions = session[:user_permissions]
|
134
|
-
check = user_permissions[:write].find { |perm| perm==area.to_s || perm=="all" }
|
135
|
-
end
|
136
|
-
when :read
|
137
|
-
unless area
|
138
|
-
user_permissions = session[:user_permissions]
|
139
|
-
check = user_permissions[:read].find { |perm| perm==self.controller_name || perm=="all" }
|
140
|
-
else
|
141
|
-
user_permissions = session[:user_permissions]
|
142
|
-
check = user_permissions[:read].find { |perm| perm==area.to_s || perm=="all" }
|
143
|
-
end
|
144
|
-
end
|
145
|
-
return check
|
146
|
-
end
|
147
|
-
|
148
|
-
# Checks if the current user is logged in but takes no further action
|
149
|
-
#
|
150
|
-
# <b>Parameters:</b>
|
151
|
-
#
|
152
|
-
# user_model - The model class representing a user (User by default)
|
153
|
-
def is_logged_in?(user_model = nil) #:doc:
|
154
|
-
user_model = Authentasaurus::Configuration.instance.user_model.camelize.constantize if user_model.nil?
|
155
|
-
unless user_model.find_by_id(session[:user_id]) || !defined?(cookie_login?)
|
156
|
-
return cookie_login?(user_model)
|
157
|
-
end
|
158
|
-
return true
|
159
|
-
end
|
160
|
-
end
|
161
|
-
|
162
|
-
module ActionController
|
163
|
-
def self.included(base) # :nodoc:
|
164
|
-
base.send :extend, ClassMethods
|
165
|
-
base.send :include, InstanceMethods
|
166
|
-
end
|
167
|
-
|
168
|
-
module ClassMethods
|
169
|
-
|
170
|
-
# Requires the user to login before accessing the actions specified
|
171
|
-
#
|
172
|
-
# <b>ex:</b> Tells Authentasaurus that the action destroy requires login and that Authentasaurus
|
173
|
-
# shouldn't store the request in the session (typically for logout actions).
|
174
|
-
#
|
175
|
-
# require_login :destroy, :skip_request => true
|
176
|
-
#
|
177
|
-
# <b>Options</b>
|
178
|
-
#
|
179
|
-
# :skip_request - skips saving the original request (to redirect to after login)
|
180
|
-
# :user_model - if defined, authentasaurus will use that model instead of the default "User"
|
181
|
-
# :if - specifies a method, proc or string to call to determine if the authorization should occur
|
182
|
-
# :unless - specifies a method, proc or string to call to determine if the authorization should not occur
|
183
|
-
def require_login (*attrs)
|
184
|
-
options = attrs.extract_options!.symbolize_keys
|
185
|
-
attrs = attrs.flatten
|
186
|
-
|
187
|
-
unless attrs.empty?
|
188
|
-
before_filter :only => attrs, :if => options[:if], :unless => options[:unless] do |controller|
|
189
|
-
controller.instance_eval {check_logged_in !options[:skip_request].nil?, options[:user_model]}
|
190
|
-
end
|
191
|
-
else
|
192
|
-
before_filter :if => options[:if], :unless => options[:unless] do |c|
|
193
|
-
c.instance_eval {check_logged_in !options[:skip_request].nil?, options[:user_model]}
|
194
|
-
end
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
# Requires the user to have a write permission to that area to access the actions specified
|
199
|
-
#
|
200
|
-
# <b>ex:</b> Tells Authentasaurus that the actions create_user and delete_user requires login and write
|
201
|
-
# permission.
|
202
|
-
#
|
203
|
-
# require_write :create_user, :delete_user
|
204
|
-
#
|
205
|
-
# <b>Options</b>
|
206
|
-
#
|
207
|
-
# :skip_request - skips saving the original request (to redirect to after login)
|
208
|
-
# :user_model - if defined, authentasaurus will use that model instead of the default "User"
|
209
|
-
# :if - specifies a method, proc or string to call to determine if the authorization should occur
|
210
|
-
# :unless - specifies a method, proc or string to call to determine if the authorization should not occur
|
211
|
-
def require_write(*attrs)
|
212
|
-
options = attrs.extract_options!.symbolize_keys
|
213
|
-
attrs = attrs.flatten
|
214
|
-
|
215
|
-
|
216
|
-
unless attrs.empty?
|
217
|
-
before_filter :only => attrs, :if => options[:if], :unless => options[:unless] do |controller|
|
218
|
-
controller.instance_eval { check_write_permissions !options[:skip_request].nil?, options[:user_model] }
|
219
|
-
end
|
220
|
-
else
|
221
|
-
before_filter :if => options[:if], :unless => options[:unless] do |c|
|
222
|
-
c.instance_eval {check_write_permissions !options[:skip_request].nil?, options[:user_model]}
|
223
|
-
end
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
# Requires the user to have a read permission to that area to access the actions specified
|
228
|
-
#
|
229
|
-
# <b>ex:</b> Tells Authentasaurus that the action show_user requires login and read permission.
|
230
|
-
#
|
231
|
-
# require_read :show_user
|
232
|
-
#
|
233
|
-
# <b>Options</b>
|
234
|
-
#
|
235
|
-
# :skip_request - skips saving the original request (to redirect to after login)
|
236
|
-
# :user_model - if defined, authentasaurus will use that model instead of the default "User"
|
237
|
-
# :if - specifies a method, proc or string to call to determine if the authorization should occur
|
238
|
-
# :unless - specifies a method, proc or string to call to determine if the authorization should not occur
|
239
|
-
def require_read(*attrs)
|
240
|
-
options = attrs.extract_options!.symbolize_keys
|
241
|
-
attrs = attrs.flatten
|
242
|
-
|
243
|
-
unless attrs.empty?
|
244
|
-
before_filter :only => attrs, :if => options[:if], :unless => options[:unless] do |controller|
|
245
|
-
controller.instance_eval { check_read_permissions !options[:skip_request].nil?, options[:user_model] }
|
246
|
-
end
|
247
|
-
else
|
248
|
-
before_filter :if => options[:if], :unless => options[:unless] do |c|
|
249
|
-
c.instance_eval { check_read_permissions !options[:skip_request].nil?, options[:user_model] }
|
250
|
-
end
|
251
|
-
end
|
252
|
-
end
|
253
|
-
end
|
254
|
-
|
255
|
-
module InstanceMethods #:nodoc:
|
256
|
-
private
|
257
|
-
include CommonInstanceMethods
|
258
|
-
|
259
|
-
# Checks if the current user is logged in and redirects to the login path if the user is not logged in.
|
260
|
-
#
|
261
|
-
# If skip_request is set to true, the user won't be redirected to the original url after he/she logs in.
|
262
|
-
def check_logged_in(skip_request = false, user_model = nil) #:nodoc:
|
263
|
-
user_model = Authentasaurus::Configuration.instance.user_model.camelize.constantize if user_model.nil?
|
264
|
-
unless is_logged_in?(user_model)
|
265
|
-
login_required skip_request
|
266
|
-
end
|
267
|
-
end
|
268
|
-
|
269
|
-
# Checks if the current user is logged in and has write permission over the current controller, redirects to no access
|
270
|
-
# page if the user hasn't the permissions and redirects to the login path if the user is not logged in
|
271
|
-
#
|
272
|
-
# If skip_request is set to true, the user won't be redirected to the original url after he/she logs in.
|
273
|
-
def check_write_permissions(skip_request = false, user_model = nil) #:nodoc:
|
274
|
-
user_model = Authentasaurus::Configuration.instance.user_model.camelize.constantize if user_model.nil?
|
275
|
-
if is_logged_in?(user_model) && user_model.new.respond_to?(:permissions)
|
276
|
-
user_permissions = session[:user_permissions]
|
277
|
-
check = user_permissions[:write].find { |perm| perm==self.controller_name || perm=="all" }
|
278
|
-
unless check
|
279
|
-
redirect_to no_access_authentasaurus_sessions_path
|
280
|
-
end
|
281
|
-
else
|
282
|
-
login_required skip_request
|
283
|
-
end
|
284
|
-
end
|
285
|
-
|
286
|
-
# Checks if the current user is logged in and has read permission over the current controller, redirects to no access
|
287
|
-
# page if the user hasn't the permissions and redirects to the login path if the user is not logged in
|
288
|
-
#
|
289
|
-
# If skip_request is set to true, the user won't be redirected to the original url after he/she logs in.
|
290
|
-
def check_read_permissions(skip_request = false, user_model = nil) #:nodoc:
|
291
|
-
user_model = Authentasaurus::Configuration.instance.user_model.camelize.constantize if user_model.nil?
|
292
|
-
if is_logged_in?(user_model) && user_model.new.respond_to?(:permissions)
|
293
|
-
user_permissions = session[:user_permissions]
|
294
|
-
check = user_permissions[:read].find { |perm| perm==self.controller_name || perm=="all" }
|
295
|
-
unless check
|
296
|
-
redirect_to no_access_authentasaurus_sessions_path
|
297
|
-
end
|
298
|
-
else
|
299
|
-
login_required skip_request
|
300
|
-
end
|
301
|
-
end
|
302
|
-
|
303
|
-
# Logs in the user through a remember me cookie
|
304
|
-
def cookie_login?(user_model = nil) #:nodoc:
|
305
|
-
user_model = Authentasaurus::Configuration.instance.user_model.camelize.constantize if user_model.nil?
|
306
|
-
|
307
|
-
if cookies[:remember_me_token]
|
308
|
-
user = user_model.find_by_remember_me_token cookies[:remember_me_token]
|
309
|
-
if user.nil?
|
310
|
-
cookies.delete :remember_me_token
|
311
|
-
return false
|
312
|
-
else
|
313
|
-
session[:user_id] = user.id
|
314
|
-
session[:user_permissions] = {:read => user.permissions.collect{|per| per.area.name if per.read}, :write => user.permissions.collect{|per| per.area.name if per.write}}
|
315
|
-
return true
|
316
|
-
end
|
317
|
-
else
|
318
|
-
return false
|
319
|
-
end
|
320
|
-
end
|
321
|
-
|
322
|
-
# Redirects the user to the login page
|
323
|
-
#
|
324
|
-
# If skip_request is set to true, the user won't be redirected to the original url after he/she logs in.
|
325
|
-
def login_required(skip_request) #:nodoc:
|
326
|
-
unless(skip_request)
|
327
|
-
session[:original_url]=request.url
|
328
|
-
end
|
329
|
-
flash.now[:alert] = t(:login_required, :scope => [:authentasaurus, :action_controller, :errors, :messages])
|
330
|
-
redirect_to new_authentasaurus_session_path
|
331
|
-
end
|
332
|
-
|
333
|
-
def controller_instance #:nodoc:
|
334
|
-
self
|
335
|
-
end
|
336
|
-
end
|
337
|
-
end
|
338
|
-
|
339
|
-
module ActionView # :nodoc:
|
340
|
-
def self.included(base)
|
341
|
-
base.send :include, CommonInstanceMethods
|
342
|
-
end
|
343
|
-
end
|
344
|
-
end
|