У меня есть два типа пользователей Администратор и Обычный пользователь
У меня есть следующие отделы
- Front Office (например,идентификатор равен 1)
- Бэк-офис (например, идентификатор равен 2)
- Администратор (например, идентификатор равен 3)
У меня есть модель с именем Запись , которая принимает user_id, департамент_ид, customer_id
Администратор пользователь имеет полный контроль CRUD по всем отделам и все записи
Обычный пользователь созданы для соответствующего отдела и имеют CRU-контроль над записями соответствующего отдела
Когда я создаю запись из Обычный пользователь (например, id равен 2), я получаю правильный набор customer_id, Department_id, user_id в таблице,Способность этого пользователя имеет только одну запись can_create_entry (current_user.id, customer_id, Department_id), например, (1, 1, 2) для учетной записи обычного пользователя фронт-офиса.
Когда я создаю запись из Администратор (например, id равен 1) учетная запись, я получаю идентификатор customer_id, Department_id, user_id как (1,1,1) в таблице, когда я пытался создать запись для Бэк-офисаотдел с идентификатором 2.
Когда я проверял список способностей для Admin пользователя;Я обнаружил, что есть дубликат для записи способности, а именно,
#<CanCan::Rule:0x0000000b61fd18 @match_all=false, @base_behavior=true, @actions=[:create], @subjects=[Entry(Table doesn't exist)], @conditions={:user_id=>1, :customer_id=>2, :department_id=>1}, @block=nil>
#<CanCan::Rule:0x0000000b61fd18 @match_all=false, @base_behavior=true, @actions=[:create], @subjects=[Entry(Table doesn't exist)], @conditions={:user_id=>1, :customer_id=>2, :department_id=>2}, @block=nil>
#<CanCan::Rule:0x0000000b61fd18 @match_all=false, @base_behavior=true, @actions=[:create], @subjects=[Entry(Table doesn't exist)], @conditions={:user_id=>1, :customer_id=>2, :department_id=>3}, @block=nil>
И для Обычный пользователь У меня есть только одна запись
#<CanCan::Rule:0x0000000b61fd18 @match_all=false, @base_behavior=true, @actions=[:create], @subjects=[Entry(Table doesn't exist)], @conditions={:user_id=>2, :customer_id=>2, :department_id=>1}, @block=nil>
Пожалуйста, помогите мне исправитьпроблема для роли администратора.
Отредактировано: able_base.rb
class AbilityBase
include CanCan::Ability
...
def can_read_entries(customer_id, department_id)
can :read, Entry, :customer_id => customer_id, :department_id => department_id
end
def can_create_entries(customer_id, department_id,user_id)
can :create, Entry, :customer_id => customer_id, :department_id => department_id, :user_id => user_id
end
def can_update_entries(customer_id, department_id, user_id)
can :update, Entry, :customer_id => customer_id, :department_id => department_id, :user_id => user_id
end
def can_destroy_entries(customer_id, department_id)
can :destroy, Entry, :customer_id => customer_id, :department_id => department_id
end
...
end
user_ability.rb
class UserAbility < AbilityBase
def initialize(current_user)
if current_user
user_department_type_names = {}
@customer = current_user.customer
@user_type = current_user.user_type
current_user_dept = current_user.departments
@user_department_ids = current_user_dept.collect(&:id)
@user_department_type_ids = current_user_dept.collect { |dept|
dept_type = dept.department_type
user_department_type_names["#{dept_type.type_name}"] = dept.id
dept_type.id
}
...
if user_department_type_names.has_key?("FRONT_OFFICE")
dept_id = user_department_type_names["FRONT_OFFICE"]
if @user_type == "NORMAL_USER"
can_read_entries(customer.id, dept_id)
can_create_entries(customer.id, dept_id, user_id)
can_update_entries(customer.id, dept_id, user_id)
elsif @user_type == "ADMIN"
can_read_entries(customer.id, dept_id)
can_create_entries(customer.id, dept_id, user_id)
can_update_entries(customer.id, dept_id, user_id)
can_destroy_entries(customer.id, dept_id)
end
elsif user_department_type_names.has_key?("BACK_OFFICE")
dept_id = user_department_type_names["BACK_OFFICE"]
if @user_type == "NORMAL_USER"
can_read_entries(customer.id, dept_id)
can_create_entries(customer.id, dept_id, user_id)
can_update_entries(customer.id, dept_id, user_id)
elsif @user_type == "ADMIN"
can_read_entries(customer.id, dept_id)
can_create_entries(customer.id, dept_id, user_id)
can_update_entries(customer.id, dept_id, user_id)
can_destroy_entries(customer.id, dept_id)
end
elsif user_department_type_names.has_key?("ADMIN")
dept_id = user_department_type_names["ADMIN"]
if @user_type == "NORMAL_USER"
can_read_entries(customer.id, dept_id)
can_create_entries(customer.id, dept_id, user_id)
can_update_entries(customer.id, dept_id, user_id)
elsif @user_type == "ADMIN"
can_read_entries(customer.id, dept_id)
can_create_entries(customer.id, dept_id, user_id)
can_update_entries(customer.id, dept_id, user_id)
can_destroy_entries(customer.id, dept_id)
end
end
...
end
end
end