@@ -183,3 +183,146 @@ func (s *Storage) GetInstanceNamesByWorkflowTemplateId(id uint) ([]string, error
183183 }
184184 return names , nil
185185}
186+
187+ func (s * Storage ) CheckUserHasOpToInstance (user * User , instance * Instance , ops []uint ) (bool , error ) {
188+ query := `
189+ SELECT instances.id
190+ FROM instances
191+ LEFT JOIN instance_role ON instance_role.instance_id = instances.id
192+ LEFT JOIN roles ON roles.id = instance_role.role_id AND roles.deleted_at IS NULL AND roles.stat = 0
193+ LEFT JOIN role_operations ON role_operations.role_id = roles.id
194+ LEFT JOIN user_role ON user_role.role_id = roles.id
195+ LEFT JOIN users ON users.id = user_role.user_id AND users.stat = 0
196+ WHERE
197+ instances.deleted_at IS NULL
198+ AND instances.id = ?
199+ AND users.id = ?
200+ AND role_operations.op_code IN (?)
201+ GROUP BY instances.id
202+ UNION
203+ SELECT instances.id
204+ FROM instances
205+ LEFT JOIN instance_role ON instance_role.instance_id = instances.id
206+ LEFT JOIN roles ON roles.id = instance_role.role_id AND roles.deleted_at IS NULL AND roles.stat = 0
207+ LEFT JOIN role_operations ON role_operations.role_id = roles.id
208+ JOIN user_group_roles ON roles.id = user_group_roles.role_id
209+ JOIN user_groups ON user_groups.id = user_group_roles.user_group_id AND user_groups.deleted_at IS NULL
210+ JOIN user_group_users ON user_groups.id = user_group_users.user_group_id
211+ JOIN users ON users.id = user_group_users.user_id AND users.deleted_at IS NULL AND users.stat=0
212+ WHERE
213+ instances.deleted_at IS NULL
214+ AND instances.id = ?
215+ AND users.id = ?
216+ AND role_operations.op_code IN (?)
217+ GROUP BY instances.id
218+ `
219+ var instances []* Instance
220+ err := s .db .Raw (query , instance .ID , user .ID , ops , instance .ID , user .ID , ops ).Scan (& instances ).Error
221+ if err != nil {
222+ return false , errors .ConnectStorageErrWrapper (err )
223+ }
224+ return len (instances ) > 0 , nil
225+ }
226+
227+ func (s * Storage ) GetUserCanOpInstances (user * User , ops []uint ) (instances []* Instance , err error ) {
228+ query := `
229+ SELECT instances.id
230+ FROM instances
231+ LEFT JOIN instance_role ON instance_role.instance_id = instances.id
232+ LEFT JOIN roles ON roles.id = instance_role.role_id AND roles.deleted_at IS NULL AND roles.stat = 0
233+ LEFT JOIN role_operations ON role_operations.role_id = roles.id
234+ LEFT JOIN user_role ON user_role.role_id = roles.id
235+ LEFT JOIN users ON users.id = user_role.user_id AND users.stat = 0
236+ WHERE
237+ instances.deleted_at IS NULL
238+ AND users.id = ?
239+ AND role_operations.op_code IN (?)
240+ GROUP BY instances.id
241+ UNION
242+ SELECT instances.id
243+ FROM instances
244+ LEFT JOIN instance_role ON instance_role.instance_id = instances.id
245+ LEFT JOIN roles ON roles.id = instance_role.role_id AND roles.deleted_at IS NULL AND roles.stat = 0
246+ LEFT JOIN role_operations ON role_operations.role_id = roles.id
247+ JOIN user_group_roles ON roles.id = user_group_roles.role_id
248+ JOIN user_groups ON user_groups.id = user_group_roles.user_group_id AND user_groups.deleted_at IS NULL
249+ JOIN user_group_users ON user_groups.id = user_group_users.user_group_id
250+ JOIN users ON users.id = user_group_users.user_id AND users.deleted_at IS NULL AND users.stat=0
251+ WHERE
252+ instances.deleted_at IS NULL
253+ AND users.id = ?
254+ AND role_operations.op_code IN (?)
255+ GROUP BY instances.id
256+ `
257+ err = s .db .Raw (query , user .ID , ops , user .ID , ops ).Scan (& instances ).Error
258+ if err != nil {
259+ return nil , errors .ConnectStorageErrWrapper (err )
260+ }
261+ return
262+ }
263+
264+ func getInstanceIDsFromInstances (instances []* Instance ) (ids []uint ) {
265+ ids = make ([]uint , len (instances ))
266+ for i := range instances {
267+ ids [i ] = instances [i ].ID
268+ }
269+ return ids
270+ }
271+
272+ //SELECT instances.id
273+ //FROM instances
274+ //LEFT JOIN instance_role ON instance_role.instance_id = instances.id
275+ //LEFT JOIN roles ON roles.id = instance_role.role_id AND roles.deleted_at IS NULL AND roles.stat = 0
276+ //LEFT JOIN role_operations ON role_operations.role_id = roles.id
277+ //LEFT JOIN user_role ON user_role.role_id = roles.id
278+ //LEFT JOIN users ON users.id = user_role.user_id AND users.stat = 0
279+ //WHERE
280+ //instances.deleted_at IS NULL
281+ //AND users.id = 5
282+ //AND role_operations.op_code IN (20200)
283+ //GROUP BY instances.id
284+ //UNION
285+ //SELECT instances.id
286+ //FROM instances
287+ //LEFT JOIN instance_role ON instance_role.instance_id = instances.id
288+ //LEFT JOIN roles ON roles.id = instance_role.role_id AND roles.deleted_at IS NULL AND roles.stat = 0
289+ //LEFT JOIN role_operations ON role_operations.role_id = roles.id
290+ //JOIN user_group_roles ON roles.id = user_group_roles.role_id
291+ //JOIN user_groups ON user_groups.id = user_group_roles.user_group_id AND user_groups.deleted_at IS NULL
292+ //JOIN user_group_users ON user_groups.id = user_group_users.user_group_id
293+ //JOIN users ON users.id = user_group_users.user_id AND users.deleted_at IS NULL AND users.stat=0
294+ //WHERE
295+ //instances.deleted_at IS NULL
296+ //AND users.id = 5
297+ //AND role_operations.op_code IN (20200)
298+ //GROUP BY instances.id
299+
300+ //SELECT instances.id
301+ //FROM instances
302+ //LEFT JOIN instance_role ON instance_role.instance_id = instances.id
303+ //LEFT JOIN roles ON roles.id = instance_role.role_id AND roles.deleted_at IS NULL AND roles.stat = 0
304+ //LEFT JOIN role_operations ON role_operations.role_id = roles.id
305+ //LEFT JOIN user_role ON user_role.role_id = roles.id
306+ //LEFT JOIN users ON users.id = user_role.user_id AND users.stat = 0
307+ //WHERE
308+ //instances.deleted_at IS NULL
309+ //AND instances.id = 5
310+ //AND users.id = 4
311+ //AND role_operations.op_code IN (20200)
312+ //GROUP BY instances.id
313+ //UNION
314+ //SELECT instances.id
315+ //FROM instances
316+ //LEFT JOIN instance_role ON instance_role.instance_id = instances.id
317+ //LEFT JOIN roles ON roles.id = instance_role.role_id AND roles.deleted_at IS NULL AND roles.stat = 0
318+ //LEFT JOIN role_operations ON role_operations.role_id = roles.id
319+ //JOIN user_group_roles ON roles.id = user_group_roles.role_id
320+ //JOIN user_groups ON user_groups.id = user_group_roles.user_group_id AND user_groups.deleted_at IS NULL
321+ //JOIN user_group_users ON user_groups.id = user_group_users.user_group_id
322+ //JOIN users ON users.id = user_group_users.user_id AND users.deleted_at IS NULL AND users.stat=0
323+ //WHERE
324+ //instances.deleted_at IS NULL
325+ //AND instances.id = 5
326+ //AND users.id = 4
327+ //AND role_operations.op_code IN (20200)
328+ //GROUP BY instances.id
0 commit comments