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
permalink #acts_as_authorization_object(options = {}) ⇒ Object
Add role query and set methods to the class (making it an auth object class).
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/acl9/model_extensions.rb', line 74 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 = " FROM \#{subj_table}\n INNER JOIN \#{role_table}_\#{subj_table} ON \#{subj_col}_id = \#{subj_table}.id\n INNER JOIN \#{role_table} ON \#{role_table}.id = \#{role.underscore}_id\n EOS\n\n sql_where = <<-'EOS'\n WHERE authorizable_type = '\#{self.class.base_class.to_s}'\n AND authorizable_id = \#{column_for_attribute(self.class.primary_key).text? ? \"'\#{id}'\": id}\n EOS\n\n has_many :accepted_roles, :as => :authorizable, :class_name => role, :dependent => :destroy\n\n has_many :\"\#{subj_table}\",\n :finder_sql => (\"SELECT DISTINCT \#{subj_table}.*\" + sql_tables + sql_where),\n :counter_sql => (\"SELECT COUNT(DISTINCT \#{subj_table}.id)\" + sql_tables + sql_where),\n :readonly => true\n\n include Acl9::ModelExtensions::ForObject\nend\n" |
permalink #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.
126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/acl9/model_extensions.rb', line 126 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 |
permalink #acts_as_authorization_subject(options = {}) ⇒ Object
Add #has_role? and other role methods to the class. Makes a class a auth. subject class.
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/acl9/model_extensions.rb', line 35 def ( = {}) assoc = [:association_name] || Acl9::config[:default_association_name] 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 assoc, :class_name => role, :join_table => join_table cattr_accessor :_auth_role_class_name, :_auth_subject_class_name, :_auth_role_assoc_name self._auth_role_class_name = role self._auth_subject_class_name = self.to_s self._auth_role_assoc_name = assoc include Acl9::ModelExtensions::ForSubject end |