План состоит в том, чтобы мои пользователи могли видеть других пользователей в индексе пользователей только в том случае, если эти пользователи принадлежат к одной студии (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