0

我有一个使用 Devise、Rolify 和 Cancan 的应用程序。

现在,它唯一的设置是区分管理员和用户,以防止访问用户索引和站点的管理部分。

我的问题是没有用户可以访问其他用户配置文件,这不应该是这种情况。例如,如果我在 ....user/2 登录,我可以更改我的 url 并查看 user/1。我如何阻止这个?

能力.rb

class Ability
  include CanCan::Ability

  def initialize(user)
    user ||= User.new # guest user (not logged in)
    if user.has_role? :admin
      can :manage, :all
      can :access, :rails_admin
      can :dashboard 
    else
      can :manage, Profile, :user_id => user.id
    end
 end
end

应用程序控制器

class ApplicationController < ActionController::Base
  protect_from_forgery

  rescue_from CanCan::AccessDenied do |exception|
    redirect_to root_path, :alert => exception.message
  end

角色.rb

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users, :join_table => :users_roles
  belongs_to :resource, :polymorphic => true
end
4

1 回答 1

0

您必须检查控制器中的功能,根据 CanCan 文档,这可以通过将其放在控制器顶部来完成:load_and_authorize_resource

这应该会限制用户查看其他个人资料,因为您似乎已经定义了将查看限制为仅查看个人资料的能力。

有关更多信息,请参阅 CanCan wiki: https ://github.com/ryanb/cancan/wiki

祝你好运!

于 2012-06-14T04:54:00.810 回答