2015-11-06 94 views
0

我有一个使用Devise和cancan的rails应用程序。我只想让用户编辑自己的数据,但仍然能够查看所有人的相关信息。rails cancan允许用户编辑* only *他们的数据,但查看每个人

我:

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    user ||= User.new # guest user (not logged in) 

    if user.role == "member" 
    their own only 
    can :read, User 
    can :manage, User, user_id: user.id 
    elsif user.role == "guest" 

    can :read, User 
    end 

我也有:

class User < ActiveRecord::Base 
    #attr_accessible :name , :email # Include default devise modules. Others available are: 

    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

ROLES = %w[member guest] 


    def is?(requested_role) 
    self.role == requested_role.to_s 
    end 

end 

但我仍然可以编辑和删除其他用户的意见。当我不能够。为什么?我究竟做错了什么? 轨道4 设计2.5.2 康康舞1.6

感谢

回答

1

你指定user_id为一列名称为您的用户模式:

can :manage, User, user_id: user.id 

我愿意打赌,用户有没有user_id列 - 它只有一个id列。你想要的是这样的:通过查看schema.rb文件,并确保有(或没有),一个user_id

can :manage, User, id: user.id 

仔细检查这一点。实际ID列名为id,并未在schema.rb中列出,但实际存在于数据库表中。

此外,请确保您确实要允许:manage权限。 :manage符号非常强大,并允许用户对有问题的对象执行任何操作,包括删除它。

1

给了用户自己编辑的数据权限,更改

can :manage, User, user_id: user.id 

can :update, User 
相关问题