Skip to content

Instantly share code, notes, and snippets.

@miio
Last active December 14, 2015 03:39
Show Gist options
  • Save miio/5022931 to your computer and use it in GitHub Desktop.
Save miio/5022931 to your computer and use it in GitHub Desktop.
class MaterialPermissionHandler < ApplicationPermissionHandler
CODE_NAMES = [
:show, :update, :delete, :edit
]
def has_perm? user, code_name, object_id
obj = Material.find_by_id object_id
# Accept author.
return true if user == obj.user
case code_name
when :show
return true if obj and obj.scope == Material::SCOPE_PUBLIC
return true if obj.scope == Material::SCOPE_GROUP and ProjectMember.where(project_id: obj.project_id, user_id: user.id).first
when :edit, :update, :delete
# Reject guest
return false if user.nil?
# Accept project member if public or group
if obj and (obj.scope == Material::SCOPE_PUBLIC or obj.scope == Material::SCOPE_GROUP)
return true if obj and ProjectMember.where(project_id: obj.project_id, user_id: user.id).first
end
end
false
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment