Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FMFR-1306 - Refactor ability so roles match better #3331

Merged
merged 1 commit into from
Oct 11, 2022
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 21 additions & 18 deletions app/models/ability.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,21 @@ class Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
cannot :manage, :all
if user.has_role? :ccs_admin
can :manage, :all
else
admin_tool_specific_auth(user)
service_specific_auth(user)
fm_supplier_specific_auth(user)
allow_list_specific_auth(user)

if user.has_role?(:fm_access)
service_buyer_specific_auth(user)
service_supplier_specific_auth(user)
service_admin_specific_auth(user)
end

allow_list_specific_auth(user)
super_admin_specific_auth(user)
end

private

def service_specific_auth(user)
return unless user.has_role?(:buyer) && user.has_role?(:fm_access)
def service_buyer_specific_auth(user)
return unless user.has_role?(:buyer)

can :read, FacilitiesManagement
can :manage, FacilitiesManagement::RM3830::Procurement, user_id: user.id
Expand All @@ -26,24 +27,26 @@ def service_specific_auth(user)
can :manage, FacilitiesManagement::Building, user_id: user.id
end

def admin_tool_specific_auth(user)
return unless user.has_role?(:fm_access) && user.has_role?(:ccs_employee)
def service_supplier_specific_auth(user)
return unless user.has_role?(:supplier)

can :read, FacilitiesManagement::RM3830::SupplierDetail
can :manage, FacilitiesManagement::RM3830::ProcurementSupplier, supplier: user.supplier_detail
end

def service_admin_specific_auth(user)
return unless user.has_role?(:ccs_employee)

can :read, :all
can :manage, FacilitiesManagement::Admin
end

def super_admin_specific_auth(user)
return unless user.has_role?(:ccs_developer)

can :manage, FacilitiesManagement::Framework
end

def fm_supplier_specific_auth(user)
return unless user.has_role?(:fm_access) && user.has_role?(:supplier)

can :read, FacilitiesManagement::RM3830::SupplierDetail
can :manage, FacilitiesManagement::RM3830::ProcurementSupplier, supplier: user.supplier_detail
end

def allow_list_specific_auth(user)
return unless user.has_role?(:allow_list_access)

Expand Down