12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- class Permission < ApplicationModel
- include ChecksClientNotification
- include ChecksHtmlSanitized
- include HasCollectionUpdate
- has_and_belongs_to_many :roles
- store :preferences
- validates :name, presence: true
-
-
-
- with_options if: -> { respond_to?(:label) && respond_to?(:description) } do
- validates :label, length: { maximum: 255 }
- validates :description, length: { maximum: 500 }
- end
- sanitized_html :description
-
-
-
-
-
-
-
- def self.with_parents(key)
- key
- .split('.')
- .each_with_object([]) do |elem, memo|
- memo << if (previous = memo.last)
- "#{previous}.#{elem}"
- else
- elem
- end
- end
- end
- def to_s
- name
- end
- def self.join_with(object, permissions)
- return object if !object.method_defined?(:permissions?)
- permissions = with_parents(permissions)
- object
- .joins(roles: :permissions)
- .where(roles: { active: true }, permissions: { name: permissions, active: true })
- end
- end
|