Repository URL to install this package:
|
Version:
6.1.1 ▾
|
# frozen_string_literal: true
module FacultyRBAC
class Group
# RBAC-schema query methods
module Query
OWN_MEMBERS = %(
select distinct username
from rbac_user_group ug
where ug.group_id = ?
)
MEMBERS = %(
select distinct username
from rbac_recursive_group gg
join rbac_user_group ug on ug.group_id = gg.member_group_id
where gg.group_id = ?
)
MEMBERSHIPS = %(
select distinct username, ug.group_id
from rbac_recursive_group gg
join rbac_user_group ug on ug.group_id = gg.member_group_id
where gg.group_id = ?
)
OWN_MEMBER_GROUPS = %(
select distinct member_group_id group_id
from rbac_group_group gg
where gg.group_id = ?
)
MEMBER_GROUPS = %(
select distinct member_group_id group_id
from rbac_recursive_group gg
where gg.group_id = ? and gg.member_group_id <> gg.group_id
)
ENCLOSING_GROUPS = %(
select distinct group_id
from rbac_group_group gg
where gg.member_group_id = ?
)
def _cte_select(name, query, *parameters)
_db[name].with(name, _db[query, *parameters])
end
def self.define_query_method(method_name, query, &transform)
define_method(method_name) do
dataset = _cte_select(method_name, query, @id)
transform ? yield(dataset) : dataset
end
end
define_query_method :own_members, OWN_MEMBERS, &DatasetDelegator.mapping(:username)
define_query_method :members, MEMBERS, &DatasetDelegator.mapping(:username)
define_query_method :memberships, MEMBERSHIPS
define_query_method :own_member_groups, OWN_MEMBER_GROUPS, &DatasetDelegator.mapping(:group_id)
define_query_method :member_groups, MEMBER_GROUPS, &DatasetDelegator.mapping(:group_id)
define_query_method :enclosing_groups, ENCLOSING_GROUPS, &DatasetDelegator.mapping(:group_id)
def grants
_db[:rbac_grant].where(group_id: @id).map { |grant| Grant[@controller, grant] }
end
end
end
end