gpt4 book ai didi

ruby-on-rails - CanCan-如何允许用户仅更新和删除自己的对象

转载 作者:行者123 更新时间:2023-12-04 13:05:22 25 4
gpt4 key购买 nike

我已经使用Devise和CanCan启动了Rails应用程序。我有与文章具有一对多关系的用户。我是CanCan的新手,这是我打算做的事情:

管理员

  • 可以对文章
  • 采取任何措施

    登录用户
  • 可以阅读和创建文章
  • 可以编辑和销毁他自己的文章

  • guest 用户
  • 可以阅读文章

  • 但是我在理解CanCan的语法时遇到了麻烦。我了解会是这样。
    def initialize(user)
    user ||= User.new
    if user.admin?
    can :manage, Article
    else
    can :read, Article
    end
    end

    但这仅适用于管理员和 guest 用户,我不确定如何区分 guest 用户和已登录用户,因为当用户为空时它会创建一个新的User对象。我已经看到代码应该类似于 can [:edit, :destroy], Article, :user_id => user.id,但是我不确定这将如何适合initialize方法。

    最后一个问题,如果我仅在guest虚拟机上定义 can :read, Article,它是否会阻止其他操作,例如创建和更新,如将读取操作列入白名单?

    任何帮助,将不胜感激。非常感谢!

    最佳答案

    这是我所做的:

    在Capacity.rb中

    def initialize(user)
    if user.nil?
    can :read, Article
    elsif user.admin?
    can :manage, Article
    else
    can [:read, :create], Article
    can [:update, :destroy], Article, :user_id => user.id
    end
    end

    为了显示链接,我使用了以下方法:
    - if can? :read, Article
    = link_to 'Show', article
    - if can? :create, Article
    = link_to 'New Article', new_article_path
    - if can? :update, article
    = link_to 'Edit', edit_article_path(article)
    - if can? :destroy, article
    = link_to 'Destroy', article, method: :delete, data: { confirm: 'Are you sure?' }

    它现在似乎正在运行,但不确定这是否是最好的方法。

    关于ruby-on-rails - CanCan-如何允许用户仅更新和删除自己的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11753600/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com