рельсы 3.2.2, канкан 1.6.7. Индекс не проходит авторизацию 1-й сессии, затем разрешается соответственно - PullRequest
0 голосов
/ 18 марта 2012

План состоит в том, чтобы мои пользователи могли видеть других пользователей в индексе пользователей только в том случае, если эти пользователи принадлежат к одной студии (user.studio_id).

Почти идеально работает. Единственный сбой в том, что ... в первый раз, когда любой пользователь (включая администратора) заходит в users / index, он получает несанкционированное сообщение. Если они попытаются снова, они получат индекс с появлением только соответствующих записей. Как я могу заставить его перестать задыхаться от авторизации при первом посещении?

ability.rb

  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

UsersController

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

      def index
      end
      ...
    end

1 Ответ

1 голос
/ 18 марта 2012

Может быть, вы можете попробовать и наоборот и удалить начальный can :read, User, а затем разрешить по can :read, User, :studio_id => user.studio_id

...