Index: design/admin/templates/content/edit_sections.tpl
===================================================================
--- design/admin/templates/content/edit_sections.tpl	(revision 17832)
+++ design/admin/templates/content/edit_sections.tpl	(working copy)
@@ -4,7 +4,7 @@
 <div class="box-header"><div class="box-tc"><div class="box-ml"><div class="box-mr"><div class="box-tl"><div class="box-tr">
 
 {* get all the available sections *}
-{def $sections=fetch( 'content', 'section_list' )
+{def $sections=fetch( 'section', 'allowed_assignment_list', hash( 'contentobject', $object ) )
      $currentSectionName='unknown'}
 
 {* get name of current section *}
Index: kernel/content/section_edit.php
===================================================================
--- kernel/content/section_edit.php	(revision 17832)
+++ kernel/content/section_edit.php	(working copy)
@@ -42,23 +42,33 @@
 {
     if ( $module->isCurrentAction( 'SectionEdit' ) )
     {
-        // Check access
-        $user =& eZUser::currentUser();
-        $access = $user->hasAccessTo( 'section' );
-        if ( !( $access['accessWord'] == 'yes' ) )
+        $http =& eZHTTPTool::instance();
+
+        $selectedSectionID = $http->hasPostVariable( 'SelectedSectionId' ) ? (int) $http->postVariable( 'SelectedSectionId' ) : 1;
+        if ( !$selectedSectionID )
+            $selectedSectionID = 1;
+
+        include_once( 'kernel/section/ezsectionfunctioncollection.php' );
+        $allowedSections = eZSectionFunctionCollection::fetchAllowedAssignmentList( $object );
+        $allowed = false;
+        foreach ( $allowedSections['result'] as $allowedSection )
         {
+            if ( $allowedSection->attribute( 'id' ) == $selectedSectionID )
+            {
+                $allowed = true;
+                break;
+            }
+        }
+
+        if ( !$allowed )
+        {
             eZDebug::writeError( "You are not allowed to assign sections." );
             return;
         }
 
-        $http =& eZHTTPTool::instance();
-
         $db =& eZDB::instance();
         $db->begin();
 
-        $selectedSectionID = $http->hasPostVariable( 'SelectedSectionId' ) ? (int) $http->postVariable( 'SelectedSectionId' ) : 1;
-        if ( !$selectedSectionID )
-            $selectedSectionID = 1;
 
         $objectID = $object->attribute( 'id' );
         $assignedNodes =& $object->attribute( 'assigned_nodes' );
Index: kernel/section/ezsectionfunctioncollection.php
===================================================================
--- kernel/section/ezsectionfunctioncollection.php	(revision 17832)
+++ kernel/section/ezsectionfunctioncollection.php	(working copy)
@@ -136,6 +136,62 @@
         $userRoles = eZRole::fetchRolesByLimitation( 'section', $sectionID );
         return array( 'result' => $userRoles );
     }
+
+    function fetchAllowedAssignmentList( $contentObject )
+    {
+        $contentClassID = $contentObject->attribute( 'contentclass_id' );
+        include_once( 'kernel/classes/datatypes/ezuser/ezuser.php' );
+        $user = eZUser::instance();
+        $access = $user->hasAccessTo( 'section', 'assign' );
+        $allowedSections = array();
+        switch ( $access['accessWord'] )
+        {
+            case 'yes':
+            {
+                include_once( 'kernel/classes/ezsection.php' );
+                $allowedSections = eZSection::fetchList();
+            } break;
+
+            case 'limited':
+            {
+                $allowedSectionIDList = array();
+                foreach ( $access['policies'] as $policy )
+                {
+                    if ( array_key_exists( 'Class', $policy ) && ! in_array( $contentClassID, $policy['Class'] ) )
+                    {
+                        continue;
+                    }
+
+                    if ( array_key_exists( 'Owner', $policy ) && in_array( 1, $policy['Owner'] ) && $user->attribute( 'contentobject_id' ) != $contentObject->attribute( 'owner_id' ) )
+                    {
+                        continue;
+                    }
+
+                    if ( array_key_exists( 'Section', $policy ) && count( $policy['Section'] > 0 ) )
+                    {
+                        $allowedSectionIDList = array_merge( $allowedSectionIDList, $policy['Section'] );
+                    }
+                    else
+                    {
+                        include_once( 'kernel/classes/ezsection.php' );
+                        $allowedSections = eZSection::fetchList();
+                        break 2;
+                    }
+                }
+                $allowedSectionIDList = array_unique( $allowedSectionIDList );
+                foreach ( $allowedSectionIDList as $allowedSectionID )
+                {
+                    $allowedSections[] = eZSection::fetch( $allowedSectionID );
+                }
+            } break;
+
+            default:
+            {
+            }
+        }
+
+        return array( 'result' => $allowedSections );
+    }
 }
 
 ?>
Index: kernel/section/function_definition.php
===================================================================
--- kernel/section/function_definition.php	(revision 17832)
+++ kernel/section/function_definition.php	(working copy)
@@ -95,4 +95,12 @@
                                                                    'type' => 'integer',
                                                                    'required' => true ) ) );
 
+$FunctionList['allowed_assignment_list'] = array( 'name' => 'allowed_assignment_list',
+                                 'call_method' => array( 'include_file' => 'kernel/section/ezsectionfunctioncollection.php',
+                                                         'class' => 'eZSectionFunctionCollection',
+                                                         'method' => 'fetchAllowedAssignmentList' ),
+                                 'parameter_type' => 'standard',
+                                 'parameters' => array( array( 'name' => 'contentobject',
+                                                               'type' => 'object',
+                                                               'required' => true ) ) );
 ?>
Index: kernel/section/module.php
===================================================================
--- kernel/section/module.php	(revision 17832)
+++ kernel/section/module.php	(working copy)
@@ -52,7 +52,41 @@
     'script' => 'assign.php',
     'default_navigation_part' => 'ezsetupnavigationpart',
     'post_actions' => array( 'BrowseActionName' ),
-    'params' => array( 'SectionID' ) );
+    'params' => array( 'SectionID' ),
+    'functions' => array( 'assign' ) );
 
+$ClassID = array(
+    'name'=> 'Class',
+    'values'=> array(),
+    'path' => 'classes/',
+    'file' => 'ezcontentclass.php',
+    'class' => 'eZContentClass',
+    'function' => 'fetchList',
+    'parameter' => array( 0, false, false, array( 'name' => 'asc' ) )
+    );
 
+$SectionID = array(
+    'name'=> 'Section',
+    'values'=> array(),
+    'path' => 'classes/',
+    'file' => 'ezsection.php',
+    'class' => 'eZSection',
+    'function' => 'fetchList',
+    'parameter' => array( false )
+    );
+
+$Assigned = array(
+    'name'=> 'Owner',
+    'values'=> array(
+        array(
+            'Name' => 'Self',
+            'value' => '1')
+        )
+    );
+
+$FunctionList = array();
+$FunctionList['assign'] = array( 'Class' => $ClassID,
+                                 'Section' => $SectionID,
+                                 'Owner' => $Assigned );
+
 ?>
