public async Task<IEnumerable<ScampResource>> GetResourcesByGroup(ScampUserReference user, string groupId) { if (!(await docdb.IsInitialized)) return null; var resources = docdb.Client.CreateDocumentQuery<ScampResource>(docdb.Collection.SelfLink) .Where(u => u.Type == "resource" && u.ResourceGroup.Id == groupId); // if not admin add where clause if (!await IsGroupAdminAsync(user, groupId)) resources = resources.Where(u => u.Owners[0].Id == user.Id); return await resources.AsDocumentQuery().ToListAsync(); }
private async Task <bool> IsGroupAdminAsync(ScampUserReference user, string groupId) { // check all group's admin var sql = new SqlQuerySpec { QueryText = "SELECT g FROM Groups g JOIN u IN g.admins WHERE g.id = @groupId AND g.type='group' AND u.id = @userId", Parameters = new SqlParameterCollection() { new SqlParameter("@groupId", groupId), new SqlParameter("@userId", user.Id) } }; var query = docdb.Client.CreateDocumentQuery <dynamic>(docdb.Collection.SelfLink, sql); var match = await query.AsDocumentQuery().FirstOrDefaultAsync(); return(match != null); }
public async Task <IEnumerable <ScampResource> > GetResourcesByGroup(ScampUserReference user, string groupId) { if (!(await docdb.IsInitialized)) { return(null); } var resources = docdb.Client.CreateDocumentQuery <ScampResource>(docdb.Collection.SelfLink) .Where(u => u.Type == "resource" && u.ResourceGroup.Id == groupId); // if not admin add where clause if (!await IsGroupAdminAsync(user, groupId)) { resources = resources.Where(u => u.Owners[0].Id == user.Id); } return(await resources.AsDocumentQuery().ToListAsync()); }
private async Task<bool> IsGroupAdminAsync(ScampUserReference user, string groupId) { // check all group's admin var sql = new SqlQuerySpec { QueryText = "SELECT g FROM Groups g JOIN u IN g.admins WHERE g.id = @groupId AND g.type='group' AND u.id = @userId", Parameters = new SqlParameterCollection() { new SqlParameter("@groupId", groupId), new SqlParameter("@userId", user.Id) } }; var query = docdb.Client.CreateDocumentQuery<dynamic>(docdb.Collection.SelfLink, sql); var match = await query.AsDocumentQuery().FirstOrDefaultAsync(); return match != null; }