Пример #1
0
        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;
            }
        }
Пример #2
0
        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();

            }
        }
Пример #3
0
 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();
     }
 }
Пример #4
0
 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());
     }
 }
Пример #5
0
 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;
     }
 }
Пример #6
0
        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();
            }
        }