Module: HasPermissions

Extended by:
ActiveSupport::Concern
Included in:
ErpUser
Defined in:
app/models/concerns/has_permissions.rb

Instance Method Summary collapse

Instance Method Details

#active_permission_groupsArray<PermissionGroup>

Returns the active permission groups for the user.

Returns:



44
45
46
47
48
49
50
# File 'app/models/concerns/has_permissions.rb', line 44

def active_permission_groups
  user_permission_groups
    .order(modification_date: :desc)
    .includes(:permission_group)
    .where(active: true)
    .map(&:permission_group)
end

#associate_permission_groups(codes: []) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'app/models/concerns/has_permissions.rb', line 52

def associate_permission_groups(
  codes: []
)
  codes.each do |code|
    permission_group_id = PermissionGroup.find_by!(code: code).id

    UserPermissionGroup.create(
      user_id: erp_user_id,
      permission_group_header_id: permission_group_id,
      active: true,
      creation_date: Time.zone.now,
      created_by: 'CHARBEL'
    )
  end
end

#has_permission?(code) ⇒ Boolean

Checks if the user has a specific permission.

Parameters:

  • code (String)

    the permission code

Returns:

  • (Boolean)

    true if the user has the permission, false otherwise



18
19
20
21
22
# File 'app/models/concerns/has_permissions.rb', line 18

def has_permission?(code)
  return true if system_record

  Permission.user_allowed?(erp_user_id: erp_user_id, code: code)
end

#has_permission_group?(code) ⇒ Boolean

Checks if the user has a specific permission group.

Parameters:

  • code (String)

    the permission group code

Returns:

  • (Boolean)

    true if the user has the permission group, false otherwise



28
29
30
31
32
# File 'app/models/concerns/has_permissions.rb', line 28

def has_permission_group?(code)
  return true if system_record

  permission_groups.exist?(code: code)
end

#has_permissions?(codes = []) ⇒ Boolean

Checks if the user has the required permissions.

Parameters:

  • codes (Array<String>) (defaults to: [])

    the permission codes to check

Returns:

  • (Boolean)

    true if the user has all the permissions, false otherwise



8
9
10
11
12
# File 'app/models/concerns/has_permissions.rb', line 8

def has_permissions?(codes = [])
  return true if system_record

  codes.all? { |code| has_permission?(code) }
end

#permission_codesArray<String>

Returns the permission codes for the user.

Returns:

  • (Array<String>)

    the permission codes for the user



37
38
39
# File 'app/models/concerns/has_permissions.rb', line 37

def permission_codes
  Permission.for_user(erp_user_id: erp_user_id).pluck(:code)
end

#update_assigned_permission_groups(current_user:, permission_group_ids: []) ⇒ void

This method returns an undefined value.

Updates the assigned permission groups for the user.

Examples:

user.update_assigned_permission_groups(current_user: current_user, permission_group_ids: [1, 2, 3])

Parameters:

  • current_user (ErpUser)

    the current user performing the update

  • permission_group_ids (Array<Integer>) (defaults to: [])

    the IDs of the permission groups to assign



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'app/models/concerns/has_permissions.rb', line 75

def update_assigned_permission_groups(
  current_user:,
  permission_group_ids: []
)
  current_permission_group_ids = active_permission_groups.pluck(:permission_group_header_id)
  removed_permission_group_ids = current_permission_group_ids - permission_group_ids
  added_permission_group_ids = permission_group_ids - current_permission_group_ids

  added_permission_group_ids.each do |permission_group_id|
    user_permission_group = user_permission_groups.find_or_initialize_by(
      permission_group_header_id: permission_group_id
    )
    user_permission_group.activate(current_user: current_user)
    user_permission_group.save!
  end

  removed_permission_group_ids.each do |permission_group_id|
    user_permission_group = user_permission_groups.find_or_initialize_by(
      permission_group_header_id: permission_group_id
    )
    user_permission_group.deactivate(current_user: current_user)
    user_permission_group.save!
  end
end

#validate_permission_groups_presenceObject



100
101
102
103
104
# File 'app/models/concerns/has_permissions.rb', line 100

def validate_permission_groups_presence
  return unless permission_groups.empty?

  errors.add(:permission_groups, 'must be present')
end