diff --git a/app/models/user.rb b/app/models/user.rb
index db3837ecdf2f41968a3a5263b775ce72c4252a12..fa6f336f6b5350b79518296ba0c3c0f0b44603f6 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -350,12 +350,15 @@ class User < ActiveRecord::Base
     def ghost
       unique_internal(where(ghost: true), 'ghost', 'ghost%s@example.com') do |u|
         u.bio = 'This is a "Ghost User", created to hold all issues authored by users that have since been deleted. This user cannot be removed.'
-        u.state = :blocked
         u.name = 'Ghost User'
       end
     end
   end
 
+  def internal?
+    ghost?
+  end
+
   #
   # Instance methods
   #
diff --git a/app/policies/global_policy.rb b/app/policies/global_policy.rb
index 3c2fbe6b56baa58386384ef32b957684a5a203ec..a1946584dd0a8ef1430a9aa1acaf4cb6f519fecd 100644
--- a/app/policies/global_policy.rb
+++ b/app/policies/global_policy.rb
@@ -4,5 +4,11 @@ class GlobalPolicy < BasePolicy
 
     can! :create_group if @user.can_create_group
     can! :read_users_list
+
+    unless @user.blocked? || @user.internal?
+      can! :log_in
+      can! :access_api
+      can! :access_git
+    end
   end
 end