29 lines
913 B
Ruby
29 lines
913 B
Ruby
class UserAbility
|
|
include CanCan::Ability
|
|
|
|
def initialize(member)
|
|
return if Ability.user_permissions[member.role].nil?
|
|
|
|
# Iterate through member permissions
|
|
Ability.user_permissions[member.role].each do |action, rules|
|
|
if rules.kind_of?(Array)
|
|
# Iterate through a list of member model access
|
|
rules.each do |rule|
|
|
# check if rule define attributes
|
|
if rule.is_a?(Hash)
|
|
model = rule.keys.first
|
|
attributes = rule[model].map(&:to_sym)
|
|
# example, can :update, Currency, [:visible, :name] (model attributes)
|
|
else
|
|
model = rule
|
|
# example, can :update, Currency
|
|
end
|
|
can action.to_sym, model == 'all' ? model.to_sym : model.constantize, attributes
|
|
end
|
|
else
|
|
can action.to_sym, rules == 'all' ? rules.to_sym : rules.constantize
|
|
end
|
|
end
|
|
end
|
|
end
|