can
दो तर्क लेता है: पहली कार्रवाई है कि उपयोगकर्ता एक संसाधन पर प्रदर्शन करने के लिए कोशिश कर रहा है के प्रकार है, दूसरा संसाधन है (वर्ग के नाम या उदाहरण चर हो सकता है) ही । आप अपनी क्षमता को सही ढंग से स्थापित किया है, तो आप इस तरह कुछ करने के लिए सक्षम होना चाहिए:
def show
if params[:format].eql?("pdf")
// do something
elsif params[:format].eql?("csv")
if can? :read, resource
#do stuff
end
end
end
मत भूलना आप अपने उपयोगकर्ता किसी भी कैनकैन चेकों को चलाने से पहले प्रमाणीकृत है करना है। can?
विधि केवल सत्य या गलत लौटाती है। मैं आमतौर पर क्षमताओं की जांच के लिए authorize!
विधि का उपयोग करना पसंद करता हूं। can
के विपरीत, यह CanCan::AccessDenied
त्रुटि बढ़ जाएगा जो आप बचाव और प्रक्रियापूर्वक प्रक्रिया कर सकते हैं। कुछ पंक्तियों में:
#models/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.role? :admin
can :manage, :all
elsif user.role? :hiring_manager
can [:read, :update], Post, user_id: user.id
end
end
end
#controllers/posts_controller.rb
class PostsController < ApplicationController::Base
before_filter :authenticate_user
def show
@post = Post.find(params[:id])
authorize! :read, @post # will thorow an exception if not allowed
end
end
फिर, मैं केवल एप्लिकेशन नियंत्रक स्तर पर अपवाद पकड़ता हूं।
स्रोत
2012-02-27 22:01:13
इस उत्तर के रूप में चिह्नित किया जाना चाहिए। धन्यवाद! –
परफेक्ट - 4 रिक्त स्थान से इंडेंट किए जाने के अलावा: डी – Hendrik