According to Google assigning resources to summary tasks is legal but highly discouraged.
Specifically, according to http://office.microsoft.com/en-ca/project-help/outline-tasks-into-subtasks-and-summary-tasks-HA010351689.aspx:
WARNING Assigning resources to summary tasks can create unpredictable durations and assignment values. If you have the same resource assigned to the summary task and its subtask, you will not be able to resolve an overallocation if the summary task is automatically scheduled. In addition, fields such as %Comp are usually used on summary tasks to indicate amount of progress made on all its subtasks. However if there is an assignment on the summary task as well, then the %Comp is used for tracking both the progress made on subtasks and progress from that summary assignment. Under these circumstances, Project may not be able track specific progress accurately.
I ended up taking David Espina's advice and moved all resource allocations to leaf level. I created the following VBA macro to automate the act of adding support resources to a task. The code is ugly (I have virtually no VBA experience) but it does the job.
' Add a Project Manager, Requirements Analyst and Graphics Designer resources with 10% units each (unless they already exist). Duration is kept the same but work increases.
Sub AddSupportStaff()
For Each task In ActiveSelection.Tasks
If Not task Is Nothing Then
If Not task.Summary Then
Dim resource As resource
Dim projectManager As assignment
Dim requirements As assignment
Dim graphics As assignment
Dim assignments As Collection
Dim i As Integer
Dim totalWork As Long
Dim oldDuration As Long
Dim containsProjectManager As Boolean
Dim containsRequirements As Boolean
Dim containsGraphics As Boolean
Dim assignWork As Boolean
containsProjectManager = False
containsRequirements = False
containsGraphics = False
totalWork = 0
For i = 1 To task.assignments.Count
totalWork = totalWork + task.assignments(i).Work
If task.assignments(i).ResourceName = "Project Manager" Then
containsProjectManager = True
End If
If task.assignments(i).ResourceName = "Requirements Analyst" Then
containsRequirements = True
End If
If task.assignments(i).ResourceName = "Graphics Designer" Then
containsGraphics = True
End If
Next i
oldDuration = task.Duration
If Not containsProjectManager Then
Set projectManager = task.assignments.Add(task.ID, ActiveProject.Resources("Project Manager").ID, 0.1)
End If
If Not containsRequirements Then
Set requirements = task.assignments.Add(task.ID, ActiveProject.Resources("Requirements Analyst").ID, 0.1)
End If
If Not containsGraphics Then
Set graphics = task.assignments.Add(task.ID, ActiveProject.Resources("Graphics Designer").ID, 0.1)
End If
For i = 1 To task.assignments.Count
assignWork = False
If (Not projectManager Is Nothing) Then
If (task.assignments(i) = projectManager) Then
assignWork = True
End If
End If
If (Not requirements Is Nothing) Then
If (task.assignments(i) = requirements) Then
assignWork = True
End If
End If
If (Not graphics Is Nothing) Then
If (task.assignments(i) = graphics) Then
assignWork = True
End If
End If
If (assignWork) Then
task.assignments(i).Work = totalWork * 0.1
End If
Next i
task.Duration = oldDuration ' Add work but keep duration constant
End If
End If
Next task
End Sub