#ruby-on-rails #ruby-on-rails-3 #cancan
#ruby-on-rails #ruby-on-rails-3 #cancan
Вопрос:
В моем приложении у меня есть следующие модели:
Users
Groups
Permissions (user_id, group_id, role_id)
Где role_id 1: администратор, 2: участник
Я хочу убедиться, что я правильно понимаю CanCan. В файле ability.rb я хочу, чтобы только администраторы группы (permission.role_id == 1) могли обновлять / уничтожать / создавать новые разрешения группы.
разрешение.role_id == 2, участники, должны просто иметь возможность читать группу и разрешения группы. За исключением возможности уничтожить их групповое разрешение.
Вот мой файл CanCan ability.rb:
class Ability
include CanCan::Ability
def initialize(current_user, groupid_viewing)
current_user ||= User.new #Guest user (not signed in)
if groupid_viewing amp;amp; current_user.try(:role, groupid_viewing) == 'Admin'
can :manage, Group
can [:create, :update], Permission do |permission|
current_user.try(:role, groupid_viewing) == 'Admin'
end
class GroupsController < ApplicationController
....
def current_ability
@current_ability ||= Ability.new(current_user, params[:group_id] amp;amp; params[:group_id].to_i)
end
class ApplicationController < ActionController::Base
def current_ability
@current_ability ||= Ability.new(current_user, nil) #(user, group)
end
Ответ №1:
Вам также необходимо указать способности для role_id:2
.
if groupid_viewing amp;amp; current_user.try(:role, groupid_viewing) == 'Member'
can :read, Group
can :destroy, Permission do |permission|
current_user.try(:role, groupid_viewing) == 'Member'
end
Кроме того, нет необходимости создавать current_ability
так, как вы делаете.
Это должен быть обратный вызов after_create, который должен назначать способности при создании участника или администратора.