Index: /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/doctests/permissions.txt
===================================================================
--- /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/doctests/permissions.txt	(revision 15133)
+++ /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/doctests/permissions.txt	(revision 15134)
@@ -39,8 +39,8 @@
     >>> from waeup.kofa.permissions import get_waeup_roles
     >>> len(list(get_waeup_roles()))
-    28
+    29
 
     >>> len(list(get_waeup_roles(also_local=True)))
-    49
+    52
 
 
@@ -78,4 +78,5 @@
      u'waeup.StudentsOfficer',
      u'waeup.TranscriptOfficer',
+     u'waeup.TranscriptSignee',
      u'waeup.UsersManager',
      u'waeup.WorkflowManager',
Index: /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/permissions.py
===================================================================
--- /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/permissions.py	(revision 15133)
+++ /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/permissions.py	(revision 15134)
@@ -155,8 +155,4 @@
 
 
-class ViewTranscript(grok.Permission):
-    grok.name('waeup.viewTranscript')
-
-
 class ManagePortalConfiguration(grok.Permission):
     """The ManagePortalConfiguration permission allows to
@@ -392,4 +388,33 @@
                      'waeup.viewAcademics',
                      'waeup.exportData')
+
+
+class LocalTranscriptOfficer(grok.Role):
+    """The LocalTranscriptOfficer role can be assigned at faculty and
+    department level. The role allows to view, to validate and to
+    release student transcripts.
+    """
+    grok.name('waeup.local.TranscriptOfficer')
+    grok.title(u'Transcript Officer')
+    grok.permissions('waeup.viewAcademics',
+                     'waeup.viewTranscript',
+                     'waeup.processTranscript',
+                     'waeup.viewStudent',
+                     'waeup.viewStudentsContainer',
+                     )
+
+
+class LocalTranscriptSignee(grok.Role):
+    """The LocalTranscriptSignee role can be assigned at faculty and
+    department level. The role allows to view and to sign student transcripts.
+    """
+    grok.name('waeup.local.TranscriptSignee')
+    grok.title(u'Transcript Signee')
+    grok.permissions('waeup.viewAcademics',
+                     'waeup.viewTranscript',
+                     'waeup.signTranscript',
+                     'waeup.viewStudent',
+                     'waeup.viewStudentsContainer',
+                     )
 
 
@@ -552,4 +577,5 @@
                      'waeup.exportData',
                      'waeup.viewTranscript',
+                     'waeup.processTranscript',
                      'waeup.viewDocuments', 'waeup.manageDocuments',
                      'waeup.managePortalConfiguration',
@@ -603,4 +629,5 @@
         'waeup.exportData',
         'waeup.viewTranscript',
+        'waeup.processTranscript',
         'waeup.viewDocuments', 'waeup.manageDocuments',
         'waeup.managePortalConfiguration', 'waeup.viewApplication',
Index: /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/students/browser.py
===================================================================
--- /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/students/browser.py	(revision 15133)
+++ /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/students/browser.py	(revision 15134)
@@ -1151,5 +1151,5 @@
     grok.context(IStudent)
     grok.name('release_transcript')
-    grok.require('waeup.viewTranscript')
+    grok.require('waeup.processTranscript')
     grok.template('transcriptrelease')
     form_fields = grok.AutoFields(IStudentTranscript)
@@ -1199,9 +1199,10 @@
 
 class StudentTranscriptRequestManageFormPage(KofaEditFormPage):
-    """ Page to manage transcript data
+    """ Page to manage transcript data. There is no link button
+    for this page. It's an emergency page.
     """
     grok.context(IStudent)
     grok.name('manage_transcript_request')
-    grok.require('waeup.manageStudent')
+    grok.require('waeup.processTranscript')
     form_fields = grok.AutoFields(IStudentTranscript)
     label = _('Manage transcript request')
Index: /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/students/permissions.py
===================================================================
--- /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/students/permissions.py	(revision 15133)
+++ /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/students/permissions.py	(revision 15134)
@@ -92,4 +92,19 @@
     """
     grok.name('waeup.loginAsStudent')
+
+class ViewTranscript(grok.Permission):
+    """The ViewTranscript role is needed to view transcript pages and slips.
+    """
+    grok.name('waeup.viewTranscript')
+
+class ProcessTranscript(grok.Permission):
+    grok.name('waeup.processTranscript')
+    """The ProcessTranscript role is needed to validate and relase transcripts.
+    """
+
+class SignTranscript(grok.Permission):
+    grok.name('waeup.signTranscript')
+    """The ViewTranscript role is needed to sign transcripts.
+    """
 
 # Local role
@@ -142,8 +157,25 @@
 
 class TranscriptOfficer(grok.Role):
+    """The Transcript Officer is allowed to view, to validate and to
+    release student transcripts.
+    """
     grok.name('waeup.TranscriptOfficer')
     grok.title(u'Transcript Officer')
     grok.permissions('waeup.viewAcademics',
                      'waeup.viewTranscript',
+                     'waeup.processTranscript',
+                     'waeup.viewStudent',
+                     'waeup.viewStudentsContainer',
+                     )
+
+class TranscriptSignee(grok.Role):
+    """The Transcript Signee is allowed to view and to sign student
+    transcripts.
+    """
+    grok.name('waeup.TranscriptSignee')
+    grok.title(u'Transcript Signee')
+    grok.permissions('waeup.viewAcademics',
+                     'waeup.viewTranscript',
+                     'waeup.signTranscript',
                      'waeup.viewStudent',
                      'waeup.viewStudentsContainer',
Index: /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/students/viewlets.py
===================================================================
--- /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/students/viewlets.py	(revision 15133)
+++ /main/waeup.kofa/branches/henrik-transcript-workflow/src/waeup/kofa/students/viewlets.py	(revision 15134)
@@ -780,5 +780,5 @@
     grok.context(IStudent)
     grok.view(StudentBaseDisplayFormPage)
-    grok.require('waeup.viewTranscript')
+    grok.require('waeup.processTranscript')
     text = _('Release transcript')
     target = 'release_transcript'
