(
SELECT member_id, permission_name
FROM members
JOIN member_group_members ON member_group_members.member_id = members.id
JOIN member_group_permissions ON member_group_permissions.member_group_name = member_group_members.member_group_name
)
UNION
(
SELECT member_id, permission_name
FROM members
JOIN member_officerships ON member_officerships.member_id = members.id
JOIN officership_permissions ON officership_permissions.officership_name = member_officerships.officership_name
WHERE
(member_officerships.start_date <= CURRENT_DATE AND member_officerships.end_date >= CURRENT_DATE)
OR (member_officerships.start_year <= date_part('year', CURRENT_TIMESTAMP)
AND member_officerships.end_year >= date_part('year', CURRENT_TIMESTAMP))
);