2017-02-07 4 views
0

В моей базе данных У меня есть пользователи. Пользователь может иметь много ролей. Роль может принадлежать многим видам деятельности, а деятельность может принадлежать многим ролям. Роль, связанная с действием, означает, что любой пользователь с этой Роль может выполнять эту деятельность.Sequelize - Как запросить косвенную ассоциацию?

Использование Sequelize и задание определенного идентификатора активности, что является лучшим способом запроса, чтобы узнать, имеет ли экземпляр пользователя хотя бы одну Роль, которая имеет разрешение на выполнение этого действия с этим идентификатором, а затем возвращает какой-то истинный/ложный ответ, поэтому я знаю, разрешено ли им выполнять Activity перед продолжением?

Если бы это было сырым запрос, он бы, вероятно, выглядеть следующим образом:

SELECT EXISTS(SELECT * 
       FROM "Activity_Role" 
       WHERE "ActivityId" = 'READ_FILE' 
       AND "RoleId" = ANY(SELECT "RoleId" 
             FROM "User_Role" 
            WHERE "UserId" = '12321') 
       LIMIT 1); 

Есть ли способ сделать это, не прибегая к исходному запросу?

ответ

0

Попробуйте вложенный запрос с ИНЕКЕ

User.findAll({ 
     include: [{ 
     model: Role, 
     include : [{model : Activity, where : {id : activityID}}] 
     }] 
    })