0

Я работаю над своей моделью способностей в приложении Rails, чтобы определить авторизацию/способности пользователя, используя cancancan. На данный момент вот что такое файл способности.rb выглядит так:Rails Разрешения: CanCanCan Abilities - Показывать только то, что создает пользователь

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    user ||= User.new # guest user (not logged in) 
     if user.admin? 
      can :manage, :all 
     else 
      can :manage, Application 
      can :read, User 
     end 
    end 
end 

Сейчас я тестирую свое приложение. когда я вхожу в учетную запись, у которой нет логического элемента admin и вы можете сказать/пользователи, они могут получить доступ к этой странице, но нажатие кнопок show или что-то еще приводит их к корневой странице и говорит, что у них нет разрешение. В настоящее время у меня есть контроллер/модель приложений (плохое соглашение об именах, реализованное позже). Но я просто хотел сделать так, чтобы любой пользователь, у которого есть логическое FALSE, если у него есть админ, обладает разными способностями. Я хочу администратора? истинный человек, чтобы иметь возможность что-либо сделать, но я хочу, чтобы все остальные могли видеть только свое собственное приложение (не все, введенное всеми пользователями), только иметь возможность создавать одно приложение и только иметь возможность видеть свою собственную информацию на странице показа пользователей, и только иметь возможность редактировать свою собственную информацию о пользователе. Может ли кто-нибудь объяснить, как указать для вещей, создаваемых только пользователями? Спасибо!

+0

http://railscasts.com/episodes/192-authorization-with-cancan –

ответ

3

определить столбец роль в вашей базе данных и вставить следующую строку в модель

генерировать миграции:

class AddRoleToUser < ActiveRecord::Migration 
    def change 
     add_column :users, :role, :integer 
    end 
end 

вставки этого в модель типа (User.rb)

enum role: [:Admin, :Client, :Enduser, :ClientUser, :Moderator] 

затем вы можете управлять своим разрешением, используя cancancan

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    user ||= User.new # guest user (not logged in) 
     if user.admin? 
      can :manage, :all 
     else 
      can [:new,:create, :update, :destroy], User 
     end 
    end 
end 
+0

ok, поэтому мне нужно, чтобы в поле пользователя было поле роли для cancan - не просто логическое поле для пользователя для admin: true или false? –

+0

Не создавайте поля interger и устанавливайте в соответствии с вашим пользователем, как определить в модели как 1 для администратора 2 для пользователя – vipin

+0

Это работает отлично. Спасибо! –

Смежные вопросы