2011-06-12 5 views
6

मैं कैनकन मणि का उपयोग करने के लिए रेलवेकास्ट से गुजर रहा हूं, लेकिन इस बात पर अटक गया हूं कि उपयोगकर्ता को अपने स्वयं के शो पेज पर जाने की अनुमति कैसे दी जाती है।मैं उपयोगकर्ता को कैनकन का उपयोग करके केवल अपने स्वयं के शो पेज पर जाने की अनुमति कैसे दे सकता हूं?

मेरे कोड इस तरह दिखता है:

क्षमता मॉडल

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    user ||= User.new # guest user (not logged in) 
    if user.role == "admin" 
     can :manage, :all 
    else 
     can :read, :all 
     if user.role == "author" 
     can :create, Review 
     can :update, Review do |review| 
      review.try(:user) == user 
     end 
     can :update, User do |user| 
      user.try(:current_user) == current_user 
     end 
     end 
     if user.role == "owner" 
     can :update, Venue 
     end 
    end 
    end 
end 

उपयोगकर्ता नियंत्रक

class UsersController < ApplicationController 
    load_and_authorize_resource 
end 

एक उपयोगकर्ता (लेखक) केवल अपने स्वयं समीक्षा अद्यतन कर सकते हैं, लेकिन यह कर सकते हैं वर्तमान में यूआरएल को बदलकर सभी उपयोगकर्ता पेज दिखाते हैं।

मुझे यहां क्या याद आ रही है?

किसी भी मदद के लिए बहुत बहुत धन्यवाद इसकी सराहना की!

+1

समस्या लाइन में है: पढ़ सकते हैं: सब कुछ। आपने सभी उपयोगकर्ताओं को सभी पृष्ठों को देखने की अनुमति दी है। – mirelon

उत्तर

10

बाधाओं को आपकी क्षमता वर्ग में सही तरीके से पारित किया जा सकता है, जिस तरह से आप कोशिश कर रहे हैं उससे भी आसान। मुझे यकीन है कि इसमें कुछ क्षमताओं की कमी है जो आप चाहते हैं, लेकिन यह आपको शुरू करना चाहिए। मैं समीक्षा :belong_to:user_id की विदेशी कुंजी वाले उपयोगकर्ता मान रहा हूं। ऐसा लगता है कि आपको स्थानों के लिए कुछ समान प्रकार की बाधा की आवश्यकता है, लेकिन आपके पास यह आपके कोड में नहीं था इसलिए मैंने इसे इसमें नहीं रखा।

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 == "author" 
     can :create, Review 
     can :update, Review, :user_id => user.id 
     can [:show, :update], User, :id => user.id 
    elsif user.role == "owner" 
     can :update, Venue 
     can [:show, :update], User, :id => user.id 
    else 
     can [:show, :update], User, :id => user.id 
    end 
    end 
end 
0

नियंत्रक में एक चेक जोड़ने का प्रयास करें जब अनुरोध के लिए/show दिखाता है कि current_user पृष्ठ/प्रोफ़ाइल का स्वामी है। कुछ के साथ कुछ:

def show 
    @user = User.find(params[:id]) 
    #show_page unless current_user.id != @user.id 
end 

शायद एक नोटिस फ्लैश करें कि "आपके पास उस पृष्ठ का स्वामित्व नहीं है" या विफलता के समान कुछ।

+0

ऐसा करने की कोई आवश्यकता नहीं है। CanCan आपके लिए यह सब कुछ कर सकते हैं। – mirelon

संबंधित मुद्दे

 संबंधित मुद्दे