public bool AddPermission(string handle, string permission) { using (var ctx = new UserContext()) { var user = ctx.Users.FirstOrDefault(x => x.Handle == handle); if (user == null) { user = new User { Handle = handle, Permissions = ctx.Permissions.Where(x => x.Uri == permission).ToList() }; ctx.Users.Add(user); } else { //User already has permission if (user.Permissions.ToPermissionStrings().Contains(permission)) return false; user.Permissions.Add(new Permission { Uri = permission }); } ctx.SaveChanges(); return true; } }
private static void RecreateAdminUserIfMissing() { //Wohoo, EF6-foo 10/10 using (var ctx = new UserContext()) { var adminUser = ctx.Users.FirstOrDefault(x => x.Handle == "nattregnet"); var permissions = ctx.Permissions.ToList(); if (adminUser == null) { adminUser = new User() { Handle = "nattregnet", Permissions = permissions }; adminUser.Permissions = permissions; ctx.Users.Add(adminUser); } else { if (adminUser.Permissions == null || !adminUser.Permissions.Equals(permissions)) { adminUser.Permissions = adminUser.Permissions == null ? permissions : new List<Permission>(adminUser.Permissions.Union(permissions)); } //Coherence is wierd :/ ctx.Entry(adminUser).State = EntityState.Modified; } ctx.SaveChanges(); } }
public IEnumerable<string> GetPermissions(string handle) { using (var ctx = new UserContext()) { var user = ctx.Users.FirstOrDefault(x => x.Handle == handle); return user?.Permissions?.Select(x => x.Uri).ToList(); } }
public bool HasPermission(string handle, string permission) { using (var ctx = new UserContext()) { var firstOrDefault = ctx.Users.Include("Permissions").FirstOrDefault(user => user.Handle == handle); return firstOrDefault != null && firstOrDefault .Permissions.Select(p => p.Uri) .Contains(permission.ToLower()); } }
public bool RemovePermission(string handle, string permission) { using (var ctx = new UserContext()) { var user = ctx.Users.FirstOrDefault(x => x.Handle == handle); if (user == null) return false; if (!user.Permissions.ToPermissionStrings().Contains(permission)) return false; user.Permissions.Remove(user.Permissions.FirstOrDefault(x => x.Uri == permission)); ctx.SaveChanges(); return true; } }
private static void RecreatePermissionTable() { //Reflection : Get all coherent types from IChatBotService and add them as permission-objects in db var type = typeof(IChatBotService); var serviceTypes = AppDomain.CurrentDomain.GetAssemblies() .SelectMany(s => s.GetTypes()) .Where(p => type.IsAssignableFrom(p) && !p.IsInterface).Select(x => x.Name.ToLower()).ToList(); using (var ctx = new UserContext()) { var objCtx = ((System.Data.Entity.Infrastructure.IObjectContextAdapter)ctx).ObjectContext; objCtx.ExecuteStoreCommand("DELETE FROM Permissions " + "DBCC CHECKIDENT ('Permissions', RESEED, 0)"); serviceTypes.ForEach(x => ctx.Permissions.Add(new Permission() { Uri = x })); ctx.SaveChanges(); } }