2009-10-20 42 views
0

我有一個MOSS工作流,在第一個表單上,用戶可以選擇一個同事來評估他。假設用戶A選擇用戶BMOSS - 以編程方式設置SpecialPermissions

提交表單後,用戶B創建了一個新的任務來評估用戶的A.

我的問題是,我需要確保任務僅僅是用戶可訪問A,而不是用戶B,也不是系統中的任何其他用戶。我試着設置SpecialPermissions屬性,但是當實例化工作流時該屬性可以綁定,所以我仍然不知道用戶A(在這種情況下是用戶B)選擇哪個用戶,然後可以' t設置權限。

我也嘗試更改MethodInvoking方法的SpecialPermissions屬性,但MOSS不會注意新的權限。

在工作流任務上設置權限的正確方法是什麼?

+0

該任務創建爲列表項目? – 2009-10-20 20:52:31

+0

是的,它被創建爲任務列表中的列表項目。 – pgb 2009-10-20 21:38:40

回答

0

下面是我如何做到的......這是我分散在多個函數中的一小段代碼。

spListItem.BreakRoleInheritance(false); 
foreach (SPRoleAssignment spRoleAssignment in spListItem.RoleAssignments) 
{ 
    if (!spRoleAssignment.RoleDefinitionBindings.Contains(this.workflowProperties.Web.RoleDefinitions.GetByType(SPRoleType.Administrator))) 
    { // don't remove administrators 
       spRoleAssignment.RoleDefinitionBindings.RemoveAll(); 
       spRoleAssignment.Update(); 
    } 
} 
SPRoleDefinition roledefinition = web.RoleDefinitions.GetByType(SPRoleType.Contribute); 
SPRoleAssignment myRoleAssignment = new SPRoleAssignment(accountName, "", "", ""); 
myRoleAssignment.RoleDefinitionBindings.Add(roledefinition); 
spListItem.RoleAssignments.Add(myRoleAssignment); 
+0

感謝您的代碼。我應該在哪裏使用它?我有一個createTaskActivity,如果我添加一個onTaskCreated,工作流開始失敗(這在MSDN中有記錄)。如果我使用代碼塊,我還沒有任務ID,所以我無法設置權限。 – pgb 2009-10-26 11:36:54

+0

OnTaskCreated是正確的地方。如果你的onTaskChange沒有觸發,那麼檢查你的令牌和任務ID,並確保它們在onTaskCreated/CreateTask/CompleteTask對象之間匹配。 – 2009-10-26 13:41:21