Ruby on rails RoR帮助保护视图中的我的CRUD链接
我有四种型号:Ruby on rails RoR帮助保护视图中的我的CRUD链接,ruby-on-rails,ruby,ruby-on-rails-4,crud,Ruby On Rails,Ruby,Ruby On Rails 4,Crud,我有四种型号: 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
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_参数创建和更新控制器方法。但是
现在我意识到,如果我部署应用程序,任何人都可以单击视图中的链接来创建/编辑/销毁数据库
限制访问的“良好做法”解决方案是什么
要将应用程序上的内容限制为只能由您访问,您必须实现一些简单的身份验证(谁能看到什么)和授权(他们能看到什么) 按照本教程中的步骤使用用户模型实现简单身份验证。创建此用户模型时,您需要添加一个
角色
字段
应验证此角色字段,以便它只能是某些角色类型数组中的角色。在用户模型中包含此角色数组,并验证用户角色是否在此数组中
ROLES = [['Admin', :admin], ['Guest',:guest]]
validates :role, inclusion: { in: %w[admin guest] }
一旦您有了这个身份验证(使用登录/注册视图),您就可以开始实现授权了。要执行此操作,请使用cancancangem
您只想授予“管理员”用户访问权限,因此可以使用此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 %>
仅当允许用户根据您定义的能力编辑项目时,此代码才会显示“编辑”按钮。在危险操作(C、U、D)中,您应检查此用户是否有权执行该操作。显然,您希望限制匿名用户。看看CancancanGem,我在很多项目中都成功地使用了它。“一个没有crud访问的新视图集”-你意识到crud中的R意味着“读取”?:)thx对于cancancan提示,如果我是唯一的一个用户(我没有计划应用程序的登录容量),它能在视图中隐藏实际链接吗?-是的,很好。。。所以Crud-r;)如果你是唯一的用户,那就简单了。只需在您必须登录才能使用创建、编辑和销毁操作的地方应用一个before过滤器。好的,现在就用谷歌搜索它!thx a lot请记住在控制器中也使用
load_和\u authorize_resource
方法来授权控制器方法。看见
<% if can? :update, @item %>
<%= link_to "Edit", edit_article_path(@article) %>
<% end %>