Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 轨道3.2.2,坎坎1.6.7。索引在每个会话的第一次授权失败,然后被适当地允许_Ruby On Rails 3_Devise_Cancan - Fatal编程技术网

Ruby on rails 3 轨道3.2.2,坎坎1.6.7。索引在每个会话的第一次授权失败,然后被适当地允许

Ruby on rails 3 轨道3.2.2,坎坎1.6.7。索引在每个会话的第一次授权失败,然后被适当地允许,ruby-on-rails-3,devise,cancan,Ruby On Rails 3,Devise,Cancan,如果我的用户属于同一个工作室(user.studio#id),那么我的用户只能在users#index中看到其他用户 它几乎可以完美地工作。唯一的问题是。。。任何用户(包括管理员)第一次访问用户/索引时,都会收到未经授权的消息。如果他们再试一次,他们得到的索引中只出现相应的记录。我怎样才能在他们第一次去那里的时候就不被授权给噎住呢 能力.rb 类能力 包括CanCan::能力 def初始化(用户) user | |=user.new#来宾用户(未登录) can:读,用户 如果user.role?

如果我的用户属于同一个工作室(user.studio#id),那么我的用户只能在users#index中看到其他用户

它几乎可以完美地工作。唯一的问题是。。。任何用户(包括管理员)第一次访问用户/索引时,都会收到未经授权的消息。如果他们再试一次,他们得到的索引中只出现相应的记录。我怎样才能在他们第一次去那里的时候就不被授权给噎住呢

能力.rb

类能力
包括CanCan::能力
def初始化(用户)
user | |=user.new#来宾用户(未登录)
can:读,用户
如果user.role?:学生
...
无法:读取,用户,[“工作室id?”,用户。工作室id]do|u|
u、 工作室id!=user.studio\u id
结束
can:update,User,[“id=?”,User.id]do | u|
u、 id==user.id
结束
结束
如果user.role?:老师
...
can:update,User,[“id=?”,User.id]do | u|
u、 id==user.id
结束
结束
如果user.role?:经理
...
can:manage,User,[“studio\u id=?”,User.studio\u id]do | u|
u、 studio\u id==user.studio\u id
结束
can:创建,用户
结束
无法:删除[Studio,事件]
无法:更改\u studio[用户]
如果user.role?:管理
can:manage,:all
can:请参阅\u ID,:全部
can:change_studio,用户
结束
结束
结束
结束
用户控制器

class UsersController[:显示,:新建,:销毁,:编辑,:更新]
def索引
结束
...
结束

也许您可以尝试另一种方法,删除初始值
can:read,User
,然后通过
can:read,User,:studio\u id=>User进行允许。studio\u id

在Ability中双击
def initialize(User)
是否存在复制错误?是的。。把它放在stackoverflow里是个打字错误。。谢谢你能听到。呸。。。在再次检查我的真实代码之后。。这不是stackflow的复制错误。事实上我的代码里有这些废话。现在我觉得自己像个白痴,但非常感谢你抓住了这个机会。
  class Ability
    include CanCan::Ability


      def initialize(user)
        user ||= User.new # guest user (not logged in)

         can :read, User

        if user.role? :Student
          ...
          cannot :read, User, ["studio_id <> ?", user.studio_id] do |u|
            u.studio_id != user.studio_id
          end
          can :update, User, ["id = ?", user.id] do |u|
            u.id == user.id
          end

        end

        if user.role? :Teacher
          ...
          can :update, User, ["id = ?", user.id] do |u|
            u.id == user.id
          end
        end



        if user.role? :Director
          ...
          can :manage, User, ["studio_id = ?", user.studio_id] do |u|
            u.studio_id == user.studio_id
          end
          can :create, User
        end

        cannot :delete, [Studio, Event]
        cannot :change_studio, [User]

        if user.role? :Admin
          can :manage, :all
          can :see_ids, :all
          can :change_studio, User
        end

      end


    end
  end
    class UsersController < ApplicationController
      respond_to :html, :xml, :json
      load_and_authorize_resource #:only => [:show,:new,:destroy,:edit,:update]

      def index
      end
      ...
    end