RoR有助于保护视图中的CRUD链接

时间:2015-07-11 07:34:54

标签: ruby-on-rails ruby ruby-on-rails-4 crud

我有四种模式:

IntPtr.Zero

路线嵌套如下:

class Country < ActiveRecord::Base
  has_many :postcards
end

class Postcard < ActiveRecord::Base
  belongs_to :Country
  has_many :photos
  has_many :tips
end

class Photos < ActiveRecord::Base
  belongs_to :postcard
end

class Tips < ActiveRecord::Base
  belongs_to :postcard
end

我遵循CRUD架构,一切正常,所有控制器都正常工作。我使用private / country_params来创建和更新控制器方法。但....

现在我意识到如果我部署应用程序,任何人都可以单击视图中的链接来创建/编辑/销毁数据库。

限制访问的“良好做法”解决方案是什么?

  1. 为我构建一个用户模型并采取admin-right?
  2. 创建一组没有访问权限的新视图?(甚至可能吗?)
  3. 使用admin gem(RailsAdmin或ActiveAdmin)?

1 个答案:

答案 0 :(得分:0)

要限制应用程序上的内容只能由您访问,您必须实现一些简单的身份验证(谁可以查看内容)和授权(他们可以看到什么)。

按照本教程中的步骤使用User模型实现简单身份验证。创建此用户模型时,您需要添加role字段。

https://gist.github.com/thebucknerlife/10090014

应验证此角色字段,使其只能是某些角色类型的角色。在User模型中包含此角色数组,并验证User的角色是否在此数组中。

ROLES = [['Admin', :admin], ['Guest',:guest]]  
validates :role, inclusion: { in: %w[admin guest] }  

一旦您具有此身份验证(使用登录/注册视图),您就可以开始实施授权。为此,请使用 cancancan gem。

https://github.com/CanCanCommunity/cancancan

您只想访问&#34; admin&#34;用户,因此您可以定义&#34;能力&#34;使用此gem的每个用户角色类型。例如:

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.admin?
      can :manage, :all  # can do any action on all objects
    else
      can :read, :all  # can only read things but can't edit them
    end
  end
end

这将为管理员用户提供在应用中执行任何操作的权限,但访客用户只能读取信息。有关定义能力的更多方法,请参阅cancancan文档。

现在,因为您已设置了不同角色的功能,所以您可以在控制器中限制对某些功能的访问。您还可以限制用户看到的内容。

<% if can? :update, @item %>
  <%= link_to "Edit", edit_article_path(@article) %>

<% end %>  

此代码仅显示&#34;编辑&#34;如果允许用户根据您定义的能力编辑项目,则按钮。