Index: trunk/grails-app/services/TaskService.groovy
===================================================================
--- trunk/grails-app/services/TaskService.groovy	(revision 601)
+++ trunk/grails-app/services/TaskService.groovy	(revision 631)
@@ -11,4 +11,5 @@
     def authService
     def dateUtilService
+    def authenticateService
     def assignedGroupService
     def assignedPersonService
@@ -325,4 +326,10 @@
                 return fail(field:"task", code:"task.operationNotPermittedOnCompleteTask")
 
+            // Check for authorisation on recurring tasks.
+            if(taskInstance.taskRecurringSchedule) {
+                if(!authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager'))
+                    return fail(field:"task", code:"task.operationNotPermittedOnRecurringTaskWithoutAuth")
+            }
+
             // If task status is "Not Started" and entry type is "Work Done" and time has been booked.
             // Then we create the started modification and set task status.
@@ -379,4 +386,10 @@
             }
 
+            // Check for authorisation on recurring tasks.
+            if(result.taskInstance.taskRecurringSchedule) {
+                if(!authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager'))
+                    return fail(field:"taskRecurringSchedule", code:"task.operationNotPermittedOnRecurringTaskWithoutAuth")
+            }
+
             result.taskInstance.properties = params
 
@@ -425,4 +438,10 @@
             }
 
+            // Check for authorisation on recurring tasks.
+            if(result.taskInstance.taskRecurringSchedule) {
+                if(!authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager'))
+                    return fail(field:"taskRecurringSchedule", code:"task.operationNotPermittedOnRecurringTaskWithoutAuth")
+            }
+
             result.taskInstance.taskStatus = TaskStatus.get(3)
             result.taskInstance.attentionFlag = false
@@ -474,4 +493,10 @@
             }
 
+            // Check for authorisation on recurring tasks.
+            if(result.taskInstance.taskRecurringSchedule) {
+                if(!authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager'))
+                    return fail(field:"taskRecurringSchedule", code:"task.operationNotPermittedOnRecurringTaskWithoutAuth")
+            }
+
             result.taskInstance.attentionFlag = true
 
@@ -520,4 +545,10 @@
             }
 
+            // Check for authorisation on recurring tasks.
+            if(result.taskInstance.taskRecurringSchedule) {
+                if(!authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager'))
+                    return fail(field:"taskRecurringSchedule", code:"task.operationNotPermittedOnRecurringTaskWithoutAuth")
+            }
+
             result.taskInstance.attentionFlag = false
 
@@ -566,4 +597,10 @@
             }
 
+            // Check for authorisation on recurring tasks.
+            if(result.taskInstance.taskRecurringSchedule) {
+                if(!authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager'))
+                    return fail(field:"taskRecurringSchedule", code:"task.operationNotPermittedOnRecurringTaskWithoutAuth")
+            }
+
             def isInProgress = false
             result.taskInstance.entries.each() {
@@ -621,4 +658,10 @@
             }
 
+            // Check for authorisation on recurring tasks.
+            if(result.taskInstance.taskRecurringSchedule) {
+                if(!authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager'))
+                    return fail(field:"taskRecurringSchedule", code:"task.operationNotPermittedOnRecurringTaskWithoutAuth")
+            }
+
             result.taskInstance.trash = true
             result.taskInstance.attentionFlag = false
@@ -669,4 +712,10 @@
             }
 
+            // Check for authorisation on recurring tasks.
+            if(result.taskInstance.taskRecurringSchedule) {
+                if(!authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager'))
+                    return fail(field:"taskRecurringSchedule", code:"task.operationNotPermittedOnRecurringTaskWithoutAuth")
+            }
+
             result.taskInstance.trash = false
 
@@ -715,4 +764,10 @@
             }
 
+            // Check for authorisation on recurring tasks.
+            if(result.taskInstance.taskRecurringSchedule) {
+                if(!authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager'))
+                    return fail(field:"taskRecurringSchedule", code:"task.operationNotPermittedOnRecurringTaskWithoutAuth")
+            }
+
             result.taskInstance.approved = true
 
@@ -759,4 +814,10 @@
                 if(result.taskInstance.version > params.version.toLong())
                     return fail(field:"version", code:"default.optimistic.locking.failure")
+            }
+
+            // Check for authorisation on recurring tasks.
+            if(result.taskInstance.taskRecurringSchedule) {
+                if(!authenticateService.ifAnyGranted('ROLE_AppAdmin,ROLE_Manager,ROLE_TaskManager'))
+                    return fail(field:"taskRecurringSchedule", code:"task.operationNotPermittedOnRecurringTaskWithoutAuth")
             }
 
