【问题标题】:Cancan, allow users to only view or edit their own contentCancan,只允许用户查看或编辑自己的内容
【发布时间】:2014-11-08 00:42:15
【问题描述】:

我正在使用 Rails 设置一个非常基本的 Web 应用程序,我已经完成了设计设置和工作。

我现在的问题是,无论我登录了谁,我都可以查看和销毁我上次登录的帐户的内容。

我只需要两种类型的角色,成员和客人。会员只能查看、编辑和销毁自己的内容,客人只能盯着注册屏幕。

有人可以帮帮我吗?我已经安装了 cancan 并且有能力文件夹。

我从这个网站上的其他几个问题中复制了一些设置,但到目前为止没有一个有效,这是我当前的 users.rb

class User < ActiveRecord::Base
  attr_accessible :name , :email # Include default devise modules. Others available are:
  # :token_authenticatable, :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 Ability
  include CanCan::Ability

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

    if user.role == "member"
      can :manage, :user_id => user.id
    elsif user.role == "guest"
      cannot :manage, :all, 
  end
end

【问题讨论】:

  • 我们需要查看代码才能帮助您。
  • 好的..我从这个网站上的其他问题中复制了一些东西,但没有一个对我有用,这是我的 users.rb

标签: ruby-on-rails devise permissions cancan


【解决方案1】:

ability.rb

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

  # admin
  if user.has_role? :admin
    can :manage, :all

  # member
  elsif user.has_role? :member
    can :manage, User, id: user.id
    cannot :index, User

  # guest
  else
    cannot :manage, User
  end

并且不要忘记在before_action 行之后的用户控制器的开头包含load_and_authorize_resource。比如像这样

证明:它确实有效

用户试图获取另一个用户的详细信息,结果 401

用户试图获取自己的详细信息,结果 200

用户试图读取所有用户,结果 401

为什么:manage, User, user_id: user.id 不起作用?

因为它会搜索users.user_id,但肯定不存在

【讨论】:

  • etiquette 正在添加关于如何改进帖子的评论,当否决时
【解决方案2】:

嗯。看起来你的语法可能有点不对:

if user.role == "member"
  can :manage, User, :user_id => user.id
elsif user.role == "guest"
  cannot :manage, User, :all
end

确保将模型(用户)作为第二个属性传递给 cancannot 方法。

【讨论】:

  • 能否详细说明最后一部分?
  • 不幸的是,没有。任何用户仍然可以查看和编辑来自任何用户的所有内容
  • 不起作用!正如@Youngmathimus 所说,会员不仅可以查看和编辑自己的,还可以查看和编辑其他人的!
  • 它试图在user记录中寻找user_id
猜你喜欢
  • 1970-01-01
  • 2014-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2017-09-21
  • 1970-01-01
相关资源
最近更新 更多