Class: Permission

Inherits:
ApplicationRecord show all
Defined in:
app/models/permission.rb

Defined Under Namespace

Classes: Codes

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from ApplicationRecord

define_decrypted_attribute, define_decrypted_attributes, #errors_in_bullet_points, primary_connection, special_connection

Class Method Details

.for_user(erp_user_id:) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'app/models/permission.rb', line 67

def for_user(erp_user_id:)
  sql = <<~SQL
    SELECT DISTINCT(p.code)
      FROM user_permission_groups upg
    INNER JOIN permission_group_details pgd
      ON pgd.permission_group_header_id = upg.permission_group_header_id
    INNER JOIN permissions p
      ON p.permission_id = pgd.permission_id
    WHERE
      upg.user_id = ?
      AND p.active = 1
      AND upg.active = 1
      AND pgd.active = 1
    GROUP BY p.code
  SQL
  Permission.find_by_sql([sql, erp_user_id])
end

.group_permissions(permission_group_id:, query: '', order: 'asc', order_by: 'code', limit: 10, offset: 0) ⇒ Object

Raises:

  • (ArgumentError)


22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/models/permission.rb', line 22

def group_permissions(
  permission_group_id:,
  query: '',
  order: 'asc',
  order_by: 'code',
  limit: 10,
  offset: 0
)
  allowed_order_columns = %w[code description associated]
  allowed_order_directions = %w[asc desc]
  raise ArgumentError unless allowed_order_columns.include?(order_by) && allowed_order_directions.include?(order)

  sql = <<~SQL.squish
    SELECT
      pgd.permission_group_detail_id,
      p.permission_id,
      p.code,
      p.[description],
      ISNULL(pgd.active, 0) AS associated
    FROM
      permissions p
    LEFT JOIN
      permission_group_details pgd ON pgd.permission_id = p.permission_id
    AND pgd.permission_group_header_id = ?
    WHERE
      p.code LIKE ? OR p.[description] LIKE ?
    ORDER BY
      #{order_by} #{order}
    OFFSET ? ROWS
    FETCH NEXT ? ROWS ONLY
  SQL

  data = Permission.find_by_sql([sql, permission_group_id, "%#{query}%", "%#{query}%", offset, limit])
   = {
    total: Permission.where(active: true).count,
    limit: limit,
    offset: offset
  }

  {
    data: data,
    metadata: 
  }
end

.user_allowed?(erp_user_id:, code:) ⇒ Boolean

Returns:

  • (Boolean)


85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'app/models/permission.rb', line 85

def user_allowed?(erp_user_id:, code:)
  sql = <<~SQL
    SELECT 1
      FROM user_permission_groups upg
    INNER JOIN permission_group_details pgd
      ON pgd.permission_group_header_id = upg.permission_group_header_id
    INNER JOIN permissions p
      ON p.permission_id = pgd.permission_id
    WHERE
      upg.user_id = ?
      AND p.code = ?
      AND p.active = 1
      AND upg.active = 1
      AND pgd.active = 1
  SQL
  Permission.find_by_sql([sql, erp_user_id, code]).any?
end

Instance Method Details

#associate_to_permission_group(permission_group_id:, current_user:) ⇒ Object



128
129
130
131
132
133
134
135
136
137
138
# File 'app/models/permission.rb', line 128

def associate_to_permission_group(permission_group_id:, current_user:)
  permission_group_detail = permission_group_details.find_or_create_by(
    permission_group_header_id: permission_group_id
  )
  permission_group_detail.assign_attributes(
    current_user.attribution_attributes(
      new_record: permission_group_detail.creation_date.nil?
    )
  )
  permission_group_detail.update!(active: true)
end

#disassociate_from_permission_group(permission_group_id:, current_user:) ⇒ Object



116
117
118
119
120
121
122
123
124
125
126
# File 'app/models/permission.rb', line 116

def disassociate_from_permission_group(permission_group_id:, current_user:)
  permission_group_detail = permission_group_details.find_or_create_by(
    permission_group_header_id: permission_group_id
  )
  permission_group_detail.assign_attributes(
    current_user.attribution_attributes(
      new_record: permission_group_detail.creation_date.nil?
    )
  )
  permission_group_detail.update!(active: false)
end