У меня есть база данных, в которой я пытаюсь отслеживать утверждения документов. Каждый документ имеет 1 или более задач. Каждое задание имеет 1 или более утверждений. Каждое утверждение имеет идентификатор назначенного пользователя, а также назначенной группы. Каждый пользователь может принадлежать к одной или нескольким группам и может иметь различные разрешения в каждой группе. Эта информация хранится в таблице отношений «многие ко многим» с дополнительным полем для уровня разрешений. (user_id, group_id, license_id)
Например, утверждение задачи может быть назначено пользователю с ID = 5 и группе с ID = 7. Чтобы пользователь мог утвердить это утверждение, он должен иметь идентификатор пользователя 5 или принадлежать к группе 7 с разрешением на утверждение.
Я хотел бы создать запрос, который выбирает все утверждения, назначенные конкретному пользователю или принадлежащие к группе, к которой у конкретного пользователя есть права «осведомленности».
Я легко возможность запросить только идентификатор пользователя с помощью:
var approvals = context.APPROVALS
.Where(a => a.APPROVER_ID == CurrentUserID)
.ToList();
Моя проблема также проверяет группы, на которые у текущего пользователя есть права «осведомленности». Лучшее, что я смог придумать, - это сохранить список групп осведомленности пользователей (сохраненных как CurrentUserAwarnessGroups в приведенном ниже примере) и выполнить что-то вроде следующего:
var approvals = context.APPROVALS
.Where(a => a.APPROVER_ID == CurrentUserID || CurrentUserAwarnessGroups.Contains(a.GROUP_ID))
Этот метод запроса не удался для меня, чтобы не упомянуть, я предполагаю, что это должно выполнить по крайней мере часть этого запроса на стороне клиента, что означает, что возвращен намного больший (и более длинный) запрос.
Может кто-нибудь предложить лучший способ выполнить эту функцию? Я могу изменить свою базу данных, если это необходимо.