Module: Volt::Model::Permissions::ClassMethods
- Defined in:
- lib/volt/models/permissions.rb
Instance Method Summary collapse
-
#own_by_user(key = :user_id) ⇒ Object
Own by user requires a logged in user (Volt.current_user) to save a model.
-
#permissions(*actions, &block) ⇒ Object
permissions takes a block and yields.
Instance Method Details
#own_by_user(key = :user_id) ⇒ Object
Own by user requires a logged in user (Volt.current_user) to save a model. If the user is not logged in, an validation error will occur. Once created the user can not be changed.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/volt/models/permissions.rb', line 11 def own_by_user(key = :user_id) relation, pattern = key.to_s, /_id$/ if relation.match(pattern) belongs_to key.to_s.gsub(pattern, '') else raise "You tried to auto associate a model using #{key}, but #{key} "\ "does not end in `_id`" end # When the model is created, assign it the user_id (if the user is logged in) on(:new) do # Only assign the user_id if there isn't already one and the user is logged in. if get(:user_id).nil? && !(user_id = Volt.current_user_id).nil? set(key, user_id) end end (:update) do # Don't allow the key to be changed deny(key) end # Setup a validation that requires a user_id validate do # Lookup directly in @attributes to optimize and prevent the need # for a nil model. unless @attributes[:user_id] # Show an error that the user is not logged in next { key => ['requires a logged in user'] } end end end |
#permissions(*actions, &block) ⇒ Object
permissions takes a block and yields
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/volt/models/permissions.rb', line 43 def (*actions, &block) # Store the permissions block so we can run it in validations self. ||= {} # if no action was specified, assume all actions actions += [:create, :read, :update, :delete] if actions.size == 0 actions.each do |action| # Add to an array of proc's for each action (self.[action] ||= []) << block end validate do action = new? ? :create : :update (action) end end |