private static void SeedPermissions(Roles roles) { foreach (var item in typeof(PermissionsSeeder).Assembly.GetTypes().Where(t => t.IsClass && !t.IsAbstract && t.IsSubclassOf(typeof(ObjectBase)))) { var instance = Activator.CreateInstance(item) as IPermissable; var defaultPermissionsAttribute = item.GetAttribute <DefaultPermissionsAttribute>(); var isDefault = defaultPermissionsAttribute?.Role == RoleNames.DefaultUsers; var isAdmin = defaultPermissionsAttribute?.Role == RoleNames.Administrators; var isPowerUser = defaultPermissionsAttribute?.Role == RoleNames.PowerUsers; if (!isAdmin) { roles.CreatePermission(instance.CreatePermissionName, true); roles.AddPermissionsToRole(instance.CreatePermissionName, RoleNames.Administrators, true); roles.AddPermissionsToRole(instance.CreatePermissionName, RoleNames.PowerUsers); if (isDefault) { roles.AddPermissionsToRole(instance.CreatePermissionName, RoleNames.DefaultUsers); } roles.CreatePermission(instance.EditPermissionName, true); roles.AddPermissionsToRole(instance.EditPermissionName, RoleNames.Administrators, true); roles.AddPermissionsToRole(instance.EditPermissionName, RoleNames.PowerUsers); if (isDefault) { roles.AddPermissionsToRole(instance.EditPermissionName, RoleNames.DefaultUsers); } roles.CreatePermission(instance.DeletePermissionName, true); roles.AddPermissionsToRole(instance.DeletePermissionName, RoleNames.Administrators, true); if (isDefault) { roles.AddPermissionsToRole(instance.DeletePermissionName, RoleNames.DefaultUsers); roles.AddPermissionsToRole(instance.DeletePermissionName, RoleNames.PowerUsers); } else if (isPowerUser) { roles.AddPermissionsToRole(instance.DeletePermissionName, RoleNames.PowerUsers); } roles.CreatePermission(instance.ViewPermissionName, true); roles.AddPermissionsToRole(instance.ViewPermissionName, RoleNames.Administrators, true); roles.AddPermissionsToRole(instance.ViewPermissionName, RoleNames.PowerUsers); if (isDefault) { roles.AddPermissionsToRole(instance.ViewPermissionName, RoleNames.DefaultUsers); } } } }