Ruby on rails rails允许用户编辑*仅*他们的数据,但查看每个人
我有一个rails应用程序,使用Desive和cancan。我希望只允许用户编辑自己的数据,但仍然能够查看其他人的数据 我有:Ruby on rails rails允许用户编辑*仅*他们的数据,但查看每个人,ruby-on-rails,ruby-on-rails-4,devise,cancan,Ruby On Rails,Ruby On Rails 4,Devise,Cancan,我有一个rails应用程序,使用Desive和cancan。我希望只允许用户编辑自己的数据,但仍然能够查看其他人的数据 我有: 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
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
class用户
但我仍然可以编辑和删除其他用户的评论。当我不能的时候。为什么?我做错了什么?
轨道4
设计2.5.2
坎坎1.6
谢谢您正在为您的用户模型指定
user\u id
作为列名:
can :manage, User, user_id: user.id
我敢打赌用户没有User\u id
列——它只有id
列。你想要的是:
can :manage, User, id: user.id
通过查看您的schema.rb
文件并确保有(或没有)一个user\u id
列来再次检查这一点。实际ID列称为ID
,未在schema.rb中列出,但实际存在于数据库表中
另外,请确保确实要允许:管理权限。:manage
符号功能非常强大,允许用户对有问题的对象执行任何操作,包括删除该对象。要授予用户编辑自己数据的权限,请更改
从
到
can :manage, User, user_id: user.id
can :update, User