我正在使用Rails设置一个非常基本的Web应用程序,我已经设置好了设置和工作。
我现在的问题是,无论我是谁登录,因为我可以查看和销毁我上次登录的帐户内容。
我只需要两种类型的角色,成员和来宾。会员应该只能查看,编辑和销毁他们自己的内容,而且客人应该只能盯着注册屏幕。
有人可以帮帮我吗?我已经安装了cancan并拥有了能力文件夹。
我从本网站上的其他几个问题中复制了一些设置,到目前为止还没有任何设置,这是我当前的用户.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
答案 0 :(得分: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
并且不要忘记在load_and_authorize_resource
行之后将before_action
包含在用户控制器的开头。例如,像这样
证明:这绝对有效
用户尝试获取其他用户的详细信息,结果401
用户试图获取自己的详细信息,结果为200
用户尝试阅读所有用户,结果401
为什么
:manage, User, user_id: user.id
无法工作?
Bcoz搜索users.user_id
肯定不存在
答案 1 :(得分:0)
嗯。看起来您的语法可能有点偏差:
if user.role == "member"
can :manage, User, :user_id => user.id
elsif user.role == "guest"
cannot :manage, User, :all
end
确保将模型(用户)作为第二个属性传递给can
和cannot
方法。