Module: Acl9::ModelExtensions::ClassMethods
- Defined in:
- lib/acl9/model_extensions.rb
Instance Method Summary collapse
-
#acts_as_authorization_object(options = {}) ⇒ Object
Add role query and set methods to the class (making it an auth object class).
-
#acts_as_authorization_role(options = {}) ⇒ Object
Make a class an auth role class.
-
#acts_as_authorization_subject(options = {}) ⇒ Object
Add #has_role? and other role methods to the class.
Instance Method Details
#acts_as_authorization_object(options = {}) ⇒ Object
Add role query and set methods to the class (making it an auth object class).
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/acl9/model_extensions.rb', line 67 def ( = {}) subject = [:subject_class_name] || Acl9::config[:default_subject_class_name] subj_table = subject.constantize.table_name subj_col = subject.underscore role = [:role_class_name] || Acl9::config[:default_role_class_name] role_table = role.constantize.table_name sql_tables = <<-EOS FROM #{subj_table} INNER JOIN #{role_table}_#{subj_table} ON #{subj_col}_id = #{subj_table}.id INNER JOIN #{role_table} ON #{role_table}.id = #{role.underscore}_id EOS sql_where = <<-'EOS' WHERE authorizable_type = '#{self.class.base_class.to_s}' AND authorizable_id = #{id} EOS has_many :accepted_roles, :as => :authorizable, :class_name => role, :dependent => :destroy has_many :"#{subj_table}", :finder_sql => ("SELECT DISTINCT #{subj_table}.*" + sql_tables + sql_where), :counter_sql => ("SELECT COUNT(DISTINCT #{subj_table}.id)" + sql_tables + sql_where), :readonly => true include Acl9::ModelExtensions::Object end |
#acts_as_authorization_role(options = {}) ⇒ Object
Make a class an auth role class.
You’ll probably never create or use objects of this class directly. Various auth. subject and object methods will do that for you internally.
119 120 121 122 123 124 125 126 127 128 129 |
# File 'lib/acl9/model_extensions.rb', line 119 def ( = {}) subject = [:subject_class_name] || Acl9::config[:default_subject_class_name] join_table = [:join_table_name] || Acl9::config[:default_join_table_name] || join_table_name(undecorated_table_name(self.to_s), undecorated_table_name(subject)) has_and_belongs_to_many subject.demodulize.tableize.to_sym, :class_name => subject, :join_table => join_table belongs_to :authorizable, :polymorphic => true end |
#acts_as_authorization_subject(options = {}) ⇒ Object
Add #has_role? and other role methods to the class. Makes a class a auth. subject class.
33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/acl9/model_extensions.rb', line 33 def ( = {}) role = [:role_class_name] || Acl9::config[:default_role_class_name] join_table = [:join_table_name] || Acl9::config[:default_join_table_name] || join_table_name(undecorated_table_name(self.to_s), undecorated_table_name(role)) has_and_belongs_to_many :role_objects, :class_name => role, :join_table => join_table cattr_accessor :_auth_role_class_name self._auth_role_class_name = role include Acl9::ModelExtensions::Subject end |