我是一名初级开发人员,为客户构建我的第一个Web应用程序,使用Rails 4.2.4,Devise进行身份验证,使用Pins脚手架来销售客户产品。
一切正常,用户可以注册和登录,然后创建,阅读,更新和销毁别针。
问题是,我不希望用户能够创建,更新或销毁index.html.erb页面上的引脚。 (只有这样的观点是客户销售产品)
如果你看附图。当您在主页上单击女士产品BTN时,它会将您带到index.html.erb,其中列出了引脚。
注意:我仍然希望用户能够通过DEVISE注册和登录,但只是更新他们的地址详细信息以便发货,而不是更改引脚内容。引脚CRUD内容应仅由客户创建。
我应该如何处理这个问题。
答案 0 :(得分:2)
我应该如何处理这个
您正在查看authorization ...
-
设计是身份验证(用户已登录),授权是另一回事。
Ryan Bates(RailsCasts)对它做了一个very good video & tutorial - 他创造了一个名为CanCanCan
的宝石,它现在是Rails授权的堡垒; Pundit
是另一个。
您要问的是如何向某些类型的用户提供权限以执行某些操作。答案是使用CanCanCan
或Pundit
评估用户是否拥有CRUD的凭据Pin
:
#Gemfile
gem "cancancan"
#app/models/ability.rb
class Ability
include CanCan::Ability
def initialize(user) #-> looks for "current_user" from devise
user ||= User.new # guest user (not logged in)
if user.customer?
can :manage, Pin
else
cannot :manage, Pin
end
end
end
#app/controllers/pins_controller.rb
class PinsController < ApplicationController
load_and_authorize_resource
end
以上内容仅允许设置为customer
的用户管理Pin
。由于您对模型/控制器代码的了解不多,以上最具体的我可以了解它。