Использование CanCan !
С его помощью вы сможете декларативно определять разрешения, например:
can :read, Project, :user_id => user.id
И позже применить это правило:
def show
@project = Project.find(params[:id])
authorize! :read, @project
end
authorize!
вызовет исключение, но вы можете проверить более мирным способом:
<%= link_to 'Link to a project', @project if can? :read, @project %>
Вы можете перехватывать ошибки авторизации и обрабатывать их в одном месте:
class ApplicationController < ActionController::Base
rescue_from CanCan::AccessDenied do |exception|
redirect_to root_url, :alert => exception.message
end
end