Eliminate RequestHandler.checkAccess implementations that only call
check.isHost.

These thirty-one identical behaviors can all be replaced by use of
melange.request.access.ProgramAdministratorAccessChecker.
diff --git a/app/soc/modules/gci/views/accepted_orgs.py b/app/soc/modules/gci/views/accepted_orgs.py
index 90d0d49..487a932 100644
--- a/app/soc/modules/gci/views/accepted_orgs.py
+++ b/app/soc/modules/gci/views/accepted_orgs.py
@@ -16,6 +16,7 @@
 
 from django.conf.urls.defaults import url as django_url
 
+from melange.request import access
 from melange.request import exception
 from soc.views.helper import lists
 from soc.views.helper import url as url_helper
@@ -166,6 +167,8 @@
   """View for the accepted organizations page for admin with additional info.
   """
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def templatePath(self):
     return 'modules/gci/accepted_orgs/base.html'
 
@@ -175,9 +178,6 @@
             name='gci_admin_accepted_orgs'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def jsonContext(self, data, check, mutator):
     list_content = AcceptedOrgsAdminList(data).getListData()
     if list_content:
diff --git a/app/soc/modules/gci/views/admin.py b/app/soc/modules/gci/views/admin.py
index 9e0e515..2edd9ed 100644
--- a/app/soc/modules/gci/views/admin.py
+++ b/app/soc/modules/gci/views/admin.py
@@ -20,6 +20,7 @@
 from django import http
 from django.utils.translation import ugettext
 
+from melange.request import access
 from soc.logic import accounts
 from soc.logic import cleaning
 from soc.logic import links
@@ -75,8 +76,9 @@
 
 
 class DashboardPage(GCIRequestHandler):
-  """Dashboard for admins.
-  """
+  """Dashboard for admins."""
+
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
 
   def djangoURLPatterns(self):
     return [
@@ -84,9 +86,6 @@
          self, name='gci_admin_dashboard'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gci/admin/base.html'
 
@@ -399,8 +398,9 @@
 
 
 class LookupLinkIdPage(GCIRequestHandler):
-  """View for the participant profile.
-  """
+  """View for the participant profile."""
+
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
 
   def djangoURLPatterns(self):
     return [
@@ -408,9 +408,6 @@
          self, name='lookup_gci_profile'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gci/admin/lookup.html'
 
diff --git a/app/soc/modules/gci/views/document.py b/app/soc/modules/gci/views/document.py
index b5919b3..4f3f21c 100644
--- a/app/soc/modules/gci/views/document.py
+++ b/app/soc/modules/gci/views/document.py
@@ -14,6 +14,7 @@
 
 """Module containing the views for GCI documents page."""
 
+from melange.request import access
 from melange.request import exception
 from soc.models import document as document_model
 from soc.views import document
@@ -151,6 +152,8 @@
 class DocumentListPage(GCIRequestHandler):
   """View for the list documents page."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def templatePath(self):
     return 'modules/gci/document/document_list.html'
 
@@ -160,9 +163,6 @@
             name='list_gci_documents'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def jsonContext(self, data, check, mutator):
     list_content = GCIDocumentList(data).getListData()
     if list_content:
diff --git a/app/soc/modules/gci/views/leaderboard.py b/app/soc/modules/gci/views/leaderboard.py
index 8e8a98e..761ecf2 100644
--- a/app/soc/modules/gci/views/leaderboard.py
+++ b/app/soc/modules/gci/views/leaderboard.py
@@ -14,6 +14,7 @@
 
 """Module containing the view for GCI leaderboard page."""
 
+from melange.request import access
 from melange.request import exception
 from soc.views.helper import lists
 from soc.views.helper import url_patterns
@@ -109,8 +110,9 @@
 
 
 class LeaderboardPage(GCIRequestHandler):
-  """View for the leaderboard page.
-  """
+  """View for the leaderboard page."""
+
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
 
   def templatePath(self):
     return 'modules/gci/leaderboard/base.html'
@@ -121,9 +123,6 @@
             name=url_names.GCI_LEADERBOARD),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def jsonContext(self, data, check, mutator):
     list_content = LeaderboardList(data).getListData()
     if list_content:
diff --git a/app/soc/modules/gci/views/org_app.py b/app/soc/modules/gci/views/org_app.py
index 24ad179..6b73fa2 100644
--- a/app/soc/modules/gci/views/org_app.py
+++ b/app/soc/modules/gci/views/org_app.py
@@ -20,6 +20,7 @@
 from django import http
 from django.utils.translation import ugettext
 
+from melange.request import access
 from melange.request import exception
 from soc.mapreduce.helper import control as mapreduce_control
 from soc.models.org_app_record import OrgAppRecord
@@ -37,15 +38,14 @@
 class GCIOrgAppEditPage(GCIRequestHandler):
   """View for creating/editing organization application."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
          url(r'org/application/edit/%s$' % url_patterns.PROGRAM,
              self, name='gci_edit_org_app'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gci/org_app/edit.html'
 
@@ -117,15 +117,14 @@
   application for the program specified in the URL.
   """
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
          url(r'org/application/preview/%s$' % url_patterns.PROGRAM,
              self, name='gci_preview_org_app'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gci/org_app/take.html'
 
diff --git a/app/soc/modules/gci/views/participants.py b/app/soc/modules/gci/views/participants.py
index 5c3e095..c999b60 100644
--- a/app/soc/modules/gci/views/participants.py
+++ b/app/soc/modules/gci/views/participants.py
@@ -14,6 +14,7 @@
 
 """Module containing the view for GCI tasks list page."""
 
+from melange.request import access
 from melange.request import exception
 from soc.views.helper import addresses
 from soc.views.helper import url_patterns
@@ -92,6 +93,8 @@
 class MentorsListAdminPage(GCIRequestHandler):
   """View for the organization admin and mentors page for admin."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def templatePath(self):
     return 'modules/gci/participants/base.html'
 
@@ -101,9 +104,6 @@
             name='gci_list_mentors'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def jsonContext(self, data, check, mutator):
     list_content = MentorsList(data).getListData()
     if list_content:
diff --git a/app/soc/modules/gci/views/program.py b/app/soc/modules/gci/views/program.py
index 94ce4d4..98893c7 100644
--- a/app/soc/modules/gci/views/program.py
+++ b/app/soc/modules/gci/views/program.py
@@ -22,6 +22,7 @@
 from django import http
 from django.utils.translation import ugettext
 
+from melange.request import access
 from soc.models.document import Document
 from soc.views import forms
 from soc.views import program as soc_program_view
@@ -120,6 +121,8 @@
 class GCIEditProgramPage(base.GCIRequestHandler):
   """View to edit the program settings."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         url_patterns.url(
@@ -139,9 +142,6 @@
 
     return {'data': json_data}
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gci/program/base.html'
 
@@ -211,6 +211,8 @@
 class TimelinePage(base.GCIRequestHandler):
   """View for the participant profile."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         url_patterns.url(
@@ -220,9 +222,6 @@
             r'timeline/edit/%s$' % soc_url_patterns.PROGRAM, self),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gci/timeline/base.html'
 
diff --git a/app/soc/modules/gci/views/propose_winners.py b/app/soc/modules/gci/views/propose_winners.py
index df5308f..b94aa3d 100644
--- a/app/soc/modules/gci/views/propose_winners.py
+++ b/app/soc/modules/gci/views/propose_winners.py
@@ -19,6 +19,7 @@
 from django import forms
 from django.utils.translation import ugettext
 
+from melange.request import access
 from melange.request import exception
 
 from soc.modules.gci.views.base import GCIRequestHandler
@@ -346,6 +347,8 @@
   """View with a list of organizations with the proposed Grand Prize Winners.
   """
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def templatePath(self):
     return 'modules/gci/org_list/base.html'
 
@@ -356,9 +359,6 @@
             name=url_names.GCI_VIEW_PROPOSED_WINNERS),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def jsonContext(self, data, check, mutator):
     list_content = ProposedWinnersForOrgsList(data).getListData()
     if list_content:
diff --git a/app/soc/modules/gci/views/students_info.py b/app/soc/modules/gci/views/students_info.py
index ed50ad7..087c6b7 100644
--- a/app/soc/modules/gci/views/students_info.py
+++ b/app/soc/modules/gci/views/students_info.py
@@ -16,6 +16,7 @@
 
 from django.utils.translation import ugettext
 
+from melange.request import access
 from melange.request import exception
 from soc.views.helper import lists
 from soc.views.helper import url_patterns
@@ -68,6 +69,8 @@
 class StudentsInfoPage(base.GCIRequestHandler):
   """View for the students info page for the admin."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def templatePath(self):
     return 'modules/gci/students_info/base.html'
 
@@ -77,9 +80,6 @@
                              self, name=url_names.GCI_STUDENTS_INFO),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def jsonContext(self, data, check, mutator):
     all_participating_students_list = AllParticipatingStudentsList(data)
     list_content = all_participating_students_list.getListData()
diff --git a/app/soc/modules/gci/views/task_list.py b/app/soc/modules/gci/views/task_list.py
index d8ece16..fc3257e 100644
--- a/app/soc/modules/gci/views/task_list.py
+++ b/app/soc/modules/gci/views/task_list.py
@@ -14,6 +14,7 @@
 
 """Module containing the views for GCI historic task page."""
 
+from melange.request import access
 from melange.request import exception
 from soc.views.helper import url_patterns
 from soc.views.helper import lists
@@ -176,6 +177,8 @@
   he or she is moved to the organization tasks for this organization.
   """
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def templatePath(self):
     return 'modules/gci/org_list/base.html'
 
@@ -185,9 +188,6 @@
             name=url_names.GCI_ORG_CHOOSE_FOR_ALL_TASKS),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def jsonContext(self, data, check, mutator):
     list_content = ChooseOrganizationList(data).getListData()
     if list_content:
@@ -223,6 +223,8 @@
   which is specified in the URL.
   """
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def templatePath(self):
     return 'modules/gci/task/task_list.html'
 
@@ -232,9 +234,6 @@
             name=url_names.GCI_ORG_TASKS_ALL),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def jsonContext(self, data, check, mutator):
     list_content = AllOrganizationTasksList(data).getListData()
     if list_content:
diff --git a/app/soc/modules/gsoc/views/accept_proposals.py b/app/soc/modules/gsoc/views/accept_proposals.py
index f8c7225..f1c2208 100644
--- a/app/soc/modules/gsoc/views/accept_proposals.py
+++ b/app/soc/modules/gsoc/views/accept_proposals.py
@@ -18,6 +18,7 @@
 
 from django import http
 
+from melange.request import access
 from soc.views.helper import url_patterns
 
 from soc.modules.gsoc.logic import accept_proposals as conversion_logic
@@ -28,6 +29,8 @@
 class AcceptProposalsPage(GSoCRequestHandler):
   """View for the host to trigger proposals to projets conversion."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def templatePath(self):
     return 'modules/gsoc/accept_proposals/base.html'
 
@@ -37,9 +40,6 @@
             name='gsoc_accept_proposals'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def context(self, data, check, mutator):
     """Returns the context for this page."""
     program = data.program
diff --git a/app/soc/modules/gsoc/views/accept_withdraw_projects.py b/app/soc/modules/gsoc/views/accept_withdraw_projects.py
index 406bab2..013b378 100644
--- a/app/soc/modules/gsoc/views/accept_withdraw_projects.py
+++ b/app/soc/modules/gsoc/views/accept_withdraw_projects.py
@@ -23,6 +23,7 @@
 
 from django import http
 
+from melange.request import access
 from melange.request import exception
 from soc.views.base_templates import ProgramSelect
 from soc.views.helper import lists
@@ -174,6 +175,8 @@
 class AcceptProposals(GSoCRequestHandler):
   """View for accepting individual proposals."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def templatePath(self):
     return 'modules/gsoc/accept_withdraw_projects/base.html'
 
@@ -185,10 +188,6 @@
             name='gsoc_admin_accept_proposals')
     ]
 
-  def checkAccess(self, data, check, mutator):
-    """Access checks for the view."""
-    check.isHost()
-
   def jsonContext(self, data, check, mutator):
     """Handler for JSON requests."""
     list_content = ProposalList(data).getListData()
@@ -374,8 +373,9 @@
 
 
 class WithdrawProjects(GSoCRequestHandler):
-  """View methods for withdraw projects
-  """
+  """View methods for withdraw projects."""
+
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
 
   def templatePath(self):
     return 'modules/gsoc/accept_withdraw_projects/base.html'
@@ -389,10 +389,6 @@
             name='gsoc_withdraw_projects')
     ]
 
-  def checkAccess(self, data, check, mutator):
-    """Access checks for the view."""
-    check.isHost()
-
   def jsonContext(self, data, check, mutator):
     """Handler for JSON requests."""
     list_content = ProjectList(data).getListData()
diff --git a/app/soc/modules/gsoc/views/accepted_orgs.py b/app/soc/modules/gsoc/views/accepted_orgs.py
index 14c3754..63acd48 100644
--- a/app/soc/modules/gsoc/views/accepted_orgs.py
+++ b/app/soc/modules/gsoc/views/accepted_orgs.py
@@ -17,6 +17,7 @@
 from django.conf.urls.defaults import url as django_url
 from django.utils import html as html_utils
 
+from melange.request import access
 from melange.request import exception
 from soc.views.base_templates import ProgramSelect
 from soc.views.helper import lists
@@ -172,15 +173,14 @@
 
   LIST_IDX = 0
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         url(r'admin/accepted_orgs/%s$' % url_patterns.PROGRAM, self,
             name=url_names.GSOC_ORG_LIST_FOR_HOST),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gsoc/admin/list.html'
 
diff --git a/app/soc/modules/gsoc/views/admin.py b/app/soc/modules/gsoc/views/admin.py
index c479e97..7e46537 100644
--- a/app/soc/modules/gsoc/views/admin.py
+++ b/app/soc/modules/gsoc/views/admin.py
@@ -23,6 +23,7 @@
 from django.utils import dateformat
 from django.utils.translation import ugettext
 
+from melange.request import access
 from melange.request import exception
 from soc.logic import accounts
 from soc.logic import cleaning
@@ -95,15 +96,14 @@
 class DashboardPage(base.GSoCRequestHandler):
   """Dashboard for admins."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         url(r'admin/%s$' % url_patterns.PROGRAM, self,
             name='gsoc_admin_dashboard'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gsoc/admin/base.html'
 
@@ -738,15 +738,14 @@
 class LookupLinkIdPage(base.GSoCRequestHandler):
   """View for the participant profile."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         url(r'admin/lookup/%s$' % url_patterns.PROGRAM, self,
             name='lookup_gsoc_profile'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gsoc/admin/lookup.html'
 
@@ -909,15 +908,14 @@
 class ProposalsPage(base.GSoCRequestHandler):
   """View for proposals for particular org."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         url(r'admin/proposals/%s$' % url_patterns.ORG, self,
             name='gsoc_proposals_org'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gsoc/admin/list.html'
 
@@ -1007,15 +1005,14 @@
 class ProjectsPage(base.GSoCRequestHandler):
   """View for projects of particular org."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         url(r'admin/projects/%s$' % url_patterns.ORG, self,
             name='gsoc_projects_org'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gsoc/admin/list.html'
 
@@ -1045,15 +1042,14 @@
 class SurveyReminderPage(base.GSoCRequestHandler):
   """Page to send out reminder emails to fill out a Survey."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         url(r'admin/survey_reminder/%s$' % url_patterns.PROGRAM, self,
             name='gsoc_survey_reminder_admin'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gsoc/admin/survey_reminder.html'
 
@@ -1239,15 +1235,14 @@
 class StudentsListPage(base.GSoCRequestHandler):
   """View that lists all the students associated with the program."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         url(r'admin/students/%s$' % url_patterns.PROGRAM, self,
             name='gsoc_students_list_admin'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gsoc/admin/list.html'
 
@@ -1271,15 +1266,14 @@
 
   LIST_IDX = 1
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         url(r'admin/all_projects/%s$' % url_patterns.PROGRAM, self,
             name='gsoc_projects_list_admin'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gsoc/admin/list.html'
 
diff --git a/app/soc/modules/gsoc/views/document.py b/app/soc/modules/gsoc/views/document.py
index d38cfe0..17a2a1c 100644
--- a/app/soc/modules/gsoc/views/document.py
+++ b/app/soc/modules/gsoc/views/document.py
@@ -16,6 +16,7 @@
 
 from django.conf.urls.defaults import url as django_url
 
+from melange.request import access
 from melange.request import exception
 from soc.views import document
 from soc.views.base_templates import ProgramSelect
@@ -153,6 +154,8 @@
 class DocumentListPage(GSoCRequestHandler):
   """View for the list documents page."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def templatePath(self):
     return 'modules/gsoc/document/document_list.html'
 
@@ -162,9 +165,6 @@
             name='list_gsoc_documents'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def jsonContext(self, data, check, mutator):
     list_content = GSoCDocumentList(data).getListData()
     if list_content:
diff --git a/app/soc/modules/gsoc/views/duplicates.py b/app/soc/modules/gsoc/views/duplicates.py
index 96b99d3..10e528e 100644
--- a/app/soc/modules/gsoc/views/duplicates.py
+++ b/app/soc/modules/gsoc/views/duplicates.py
@@ -19,6 +19,7 @@
 
 from django import http
 
+from melange.request import access
 from soc.views.helper import url_patterns
 from soc.views.template import Template
 
@@ -34,6 +35,8 @@
 class DuplicatesPage(GSoCRequestHandler):
   """View for the host to see duplicates."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def templatePath(self):
     return 'modules/gsoc/duplicates/base.html'
 
@@ -43,9 +46,6 @@
             name='gsoc_view_duplicates'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def context(self, data, check, mutator):
     """Returns the context for this page."""
     program = data.program
diff --git a/app/soc/modules/gsoc/views/grading_record_details.py b/app/soc/modules/gsoc/views/grading_record_details.py
index 42fb702..b5fdd53 100644
--- a/app/soc/modules/gsoc/views/grading_record_details.py
+++ b/app/soc/modules/gsoc/views/grading_record_details.py
@@ -21,6 +21,7 @@
 
 from django import http
 
+from melange.request import access
 from melange.request import exception
 
 from soc.views import forms
@@ -39,8 +40,9 @@
 from soc.modules.gsoc.views.helper.url_patterns import url
 
 class GradingGroupCreate(GSoCRequestHandler):
-  """View to display GradingRecord details.
-  """
+  """View to display GradingRecord details."""
+
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
 
   def djangoURLPatterns(self):
     return [
@@ -48,9 +50,6 @@
          self, name='gsoc_grading_group'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def context(self, data, check, mutator):
     return {
         'page_name': 'Grading Group Create Page',
diff --git a/app/soc/modules/gsoc/views/org_app.py b/app/soc/modules/gsoc/views/org_app.py
index 0e20c48..8307c7f 100644
--- a/app/soc/modules/gsoc/views/org_app.py
+++ b/app/soc/modules/gsoc/views/org_app.py
@@ -20,6 +20,7 @@
 from django import http
 from django.utils.translation import ugettext
 
+from melange.request import access
 from melange.request import exception
 from soc.logic import org_app as org_app_logic
 from soc.mapreduce.helper import control as mapreduce_control
@@ -80,15 +81,14 @@
 class GSoCOrgAppEditPage(GSoCRequestHandler):
   """View for creating/editing organization application."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
          url(r'org/application/edit/%s$' % url_patterns.PROGRAM,
              self, name='gsoc_edit_org_app'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gsoc/org_app/edit.html'
 
diff --git a/app/soc/modules/gsoc/views/program.py b/app/soc/modules/gsoc/views/program.py
index a32636c..0f01058 100644
--- a/app/soc/modules/gsoc/views/program.py
+++ b/app/soc/modules/gsoc/views/program.py
@@ -14,12 +14,12 @@
 
 """Module for the program settings pages."""
 
-
 from google.appengine.ext import db
 
 from django import forms as django_forms
 from django.utils import translation
 
+from melange.request import access
 from soc.logic import mail_dispatcher
 from soc.logic.helper import notifications
 from soc.models import document
@@ -214,6 +214,8 @@
 class GSoCEditProgramPage(base.GSoCRequestHandler):
   """View to edit the program settings."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         url_patterns.url(r'program/edit/%s$' % soc_url_patterns.PROGRAM, self,
@@ -232,9 +234,6 @@
 
     return {'data': json_data}
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gsoc/program/base.html'
 
@@ -304,6 +303,8 @@
 class TimelinePage(base.GSoCRequestHandler):
   """View for the participant profile."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         url_patterns.url(r'timeline/%s$' % soc_url_patterns.PROGRAM, self,
@@ -311,9 +312,6 @@
         url_patterns.url(r'timeline/edit/%s$' % soc_url_patterns.PROGRAM, self),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gsoc/timeline/base.html'
 
diff --git a/app/soc/modules/gsoc/views/slot_allocation.py b/app/soc/modules/gsoc/views/slot_allocation.py
index 9570ce0..0e1b0d7 100644
--- a/app/soc/modules/gsoc/views/slot_allocation.py
+++ b/app/soc/modules/gsoc/views/slot_allocation.py
@@ -21,6 +21,7 @@
 
 from django import http
 
+from melange.request import access
 from melange.request import exception
 from soc.views.helper import lists
 from soc.views.helper import url_patterns
@@ -184,15 +185,14 @@
 class SlotsPage(base.GSoCRequestHandler):
   """View for the participant profile."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         gsoc_url_patterns.url(r'admin/slots/%s$' % url_patterns.PROGRAM, self,
             name='gsoc_slots'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gsoc/admin/list.html'
 
diff --git a/app/soc/modules/gsoc/views/slot_transfer_admin.py b/app/soc/modules/gsoc/views/slot_transfer_admin.py
index 43c1406..7b91cdc 100644
--- a/app/soc/modules/gsoc/views/slot_transfer_admin.py
+++ b/app/soc/modules/gsoc/views/slot_transfer_admin.py
@@ -21,6 +21,7 @@
 
 from django import http
 
+from melange.request import access
 from melange.request import exception
 from soc.views import template
 from soc.views.helper import lists
@@ -220,6 +221,8 @@
 class SlotsTransferAdminPage(base.GSoCRequestHandler):
   """View for the the list of slot transfer requests."""
 
+  access_checker = access.PROGRAM_ADMINISTRATOR_ACCESS_CHECKER
+
   def djangoURLPatterns(self):
     return [
         gsoc_url_patterns.url(
@@ -227,9 +230,6 @@
             name='gsoc_admin_slots_transfer'),
     ]
 
-  def checkAccess(self, data, check, mutator):
-    check.isHost()
-
   def templatePath(self):
     return 'modules/gsoc/slot_transfer_admin/base.html'