Rails CanCan Auth Проблема - PullRequest
       5

Rails CanCan Auth Проблема

2 голосов
/ 25 января 2010

Я использую плагин авторизации CanCan (http://github.com/ryanb/cancan) для моего приложения, и до сих пор он работал отлично. Я установил его следующим образом:

    class Ability
  include CanCan::Ability

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

    if user.role == "admin"
      can :manage, :all
    else
       can :read, :all 


    end
  end
end

Это позволяет мне назначать некоторых пользователей администраторами, и только они могут получить доступ к функциям записи. Теперь я хочу сделать еще один шаг и сделать так, чтобы люди, которые вообще не вошли в систему (current_user / user_session не существует), не могли получить доступ к некоторым контроллерам сайта. Я знаю, что это должен быть своего рода elsif со средней частью кода для пользователя и последним остальным для всех остальных. Тем не менее, я не смог выяснить, как лучше всего это настроить. Кто-нибудь знаком с CanCan и знает, как лучше всего подойти к этому типу ситуации?

Спасибо, ребята, каждый помогает мне больше узнать о рельсах и развитии в целом!

Ответы [ 3 ]

4 голосов
/ 25 января 2010

Я не совсем знаком с CanCan, но такая логика принадлежит конкретному контроллеру. Это выдержка из того, как я это делаю. Я уверен, что вы поняли смысл и можете абстрагировать его на CanCan.

class ItemsController < ApplicationController
  before_filter :login_required
  # or if you only want to restrict it to some actions etc 
  # before_filter :login_required, :except => [:show]
  # or
  # before_filter :login_required, :only => [:edit]
end

class ApplicationController < ActionController::Base
  protected
    def login_required
       access_denied! unless current_user.logged_in?
    end
end

CanCan для авторизации, а не аутентификации. Есть разница;)

0 голосов
/ 08 декабря 2010

Может быть, вы можете сделать:

  def initialize(user)
    if user.role?("admin")
      can :manage, :all
    elsif user.role?("sales member")
      can :manage, Request
    elsif user.role?("sales admin")
      can :manage, Request
      can :manage, SpecialOffer
    else
      cannot :manage, :all
    end
  end

Вместо того, чтобы положить: все, просто введите название модели (например, Request, SpecialOffer).

( Как реализовать динамическую авторизацию с CanCan? )

0 голосов
/ 28 января 2010

Я не знаю, ищите ли вы ответ на этот вопрос, но это не слишком сложно. Все, что вам нужно, это условие, ложное для гостевого пользователя. В вашем блоке else вставьте что-то вроде может: показать, контроллер сделать | контроллер | user.id.present? конец

Если пользователь гость, это будет ложным, поскольку он не был сохранен, и, следовательно, нет доступа. Если это вошедший в систему пользователь, это будет правдой, и они получат доступ.

...