using Bootstrap.Security; using MongoDB.Driver; using System.Collections.Generic; using System.Linq; namespace Bootstrap.DataAccess.MongoDB { /// /// /// public class Group : DataAccess.Group { /// /// /// public IEnumerable Roles { get; set; } /// /// /// /// public override IEnumerable Retrieves() { return DbManager.Groups.Find(FilterDefinition.Empty).ToList(); } /// /// /// /// /// public override bool Save(DataAccess.Group p) { if (string.IsNullOrEmpty(p.Id)) { DbManager.Groups.InsertOne(new Group() { GroupCode = p.GroupCode, GroupName = p.GroupName, Description = p.Description, Roles = new List() }); p.Id = DbManager.Groups.Find(g => g.GroupName == p.GroupName && g.Description == p.Description).FirstOrDefault().Id; } else { DbManager.Groups.UpdateOne(md => md.Id == p.Id, Builders.Update.Set(md => md.GroupName, p.GroupName).Set(md => md.Description, p.Description)); } return true; } /// /// /// /// /// public override bool Delete(IEnumerable value) { var list = new List>(); foreach (var id in value) { list.Add(new DeleteOneModel(Builders.Filter.Eq(g => g.Id, id))); } DbManager.Groups.BulkWrite(list); return true; } /// /// /// /// /// public override IEnumerable RetrievesByUserId(string userId) { var groups = GroupHelper.Retrieves(); var user = UserHelper.Retrieves().Cast().FirstOrDefault(u => u.Id == userId); groups.ToList().ForEach(g => g.Checked = user.Groups.Any(id => id == g.Id) ? "checked" : ""); return groups; } /// /// /// /// /// /// public override bool SaveByUserId(string userId, IEnumerable groupIds) { DbManager.Users.FindOneAndUpdate(u => u.Id == userId, Builders.Update.Set(u => u.Groups, groupIds)); return true; } /// /// /// /// /// public override IEnumerable RetrievesByRoleId(string roleId) { var groups = GroupHelper.Retrieves().Cast().ToList(); groups.ForEach(p => p.Checked = (p.Roles != null && p.Roles.Contains(roleId)) ? "checked" : ""); return groups; } /// /// /// /// /// /// public override bool SaveByRoleId(string roleId, IEnumerable groupIds) { var groups = DbManager.Groups.Find(md => md.Roles != null && md.Roles.Contains(roleId)).ToList(); // Remove roles groups.ForEach(p => { var roles = p.Roles == null ? new List() : p.Roles.ToList(); roles.Remove(roleId); DbManager.Groups.UpdateOne(md => md.Id == p.Id, Builders.Update.Set(md => md.Roles, roles)); }); groups = DbManager.Groups.Find(md => groupIds.Contains(md.Id)).ToList(); // Add roles groups.ForEach(p => { var roles = p.Roles == null ? new List() : p.Roles.ToList(); roles.Add(roleId); DbManager.Groups.UpdateOne(md => md.Id == p.Id, Builders.Update.Set(md => md.Roles, roles)); }); return true; } /// /// /// /// /// public override IEnumerable RetrievesByUserName(string userName) { var groups = new List(); var user = UserHelper.Retrieves().Cast().FirstOrDefault(u => u.UserName == userName); var group = GroupHelper.Retrieves(); groups.AddRange(group.Where(g => user.Groups.Any(ug => ug == g.Id))); return groups; } } }