2010-04-01 71 views
0

我正在設計SharePoint上的系統。這些項目有一個批准清單。成員可以批准,拒絕和編輯項目。批准清單中的一個必須在批准時填寫該項目中的「分配給」字段。添加到「分配給」字段的用戶應該能夠在批准後編輯該項目的內容。那麼,如何在將用戶添加到特定項目的字段後向用戶授予編輯權限?動態更改用戶權限

的情況是:

批准列表:A,B,C(編輯,查看 許可)

用戶:X,Y,Z ......(沒有權限,視圖 批准後)

項目:項目1,項目2,項目3 ....

項目是不可見的。 A批准item1並將X添加到「分配給」字段。這意味着這個項目是在X的責任之下。但X沒有編輯權限。我們不能給每個項目的X編輯權限。在他寫入「分配給」字段後,他應編輯這些項目。

如何在SharePoint中創建此工作流程?請急需幫助。

+0

此SharePoint中的功能來管理權限動態地添加規則對列表的權限。 [SharePoint規則權限](https://permissionmanagement.codeplex.com) – 2013-11-18 08:05:30

回答

1

不是100%肯定它是完全清楚自己正在努力實現的,但是...

我從你的問題的理解,你想要做的是分配唯一的權限,根據列表項在該列表項的分配給字段中的值。

我會做到這一點的方法是創建爲您的項目列表中的事件處理程序,當列表更新項目運行/批准等,這會: -

  1. 閱讀在分配給字段中的值
  2. 列表項目中斷權限繼承
  3. 將用戶分配給該項目的字段編輯權限。
+0

謝謝你的回答。 系統: 工人(此處爲Worker1)將通過填充特定零件來創建表單。該表單對其他工作人員不可見。 Group1中的一個人必須批准它(隨機或有時間轉移)。現在,表單對所有工作人員都是可見的。此外,表單中還有一個「分配給」字段。來自Group1的人員進行了批准(可能在他同時進行批准操作的同時)必須添加一個工人姓名(worker2)以分配給field.Now Worker2僅對Workers1的表單進行了編輯,而不適用於其他表單。 我們可以在沒有編碼的情況下對工作流程做到這一點嗎? – ephieste 2010-04-01 17:25:18

+0

假設Worker55創建了一個表單並且我批准了它並分配給了Worker66。現在,每個人都可以看到該表單,因爲它已被批准,並且Worker66具有Worker55表單的編輯權限(因爲分配給:Worker55)。我可以刪除Worker66並編寫Worker77。現在Worker77對Worker55'表單不具有Worker66的編輯權限。如果我同時寫入Worker77和Worker66以「分配給」。然後他們都可以編輯Worker55的表格。 你明白了嗎? – ephieste 2010-04-01 17:37:49

+0

我通過版本控制設置創建了組1(批准列表)。 – ephieste 2010-04-01 17:42:19

1

保羅·盧卡斯所提到的,你可以使用一個ItemAdded和ItemUpdated事件接收器和這樣的方法做到這一點,有額外的異常處理

public override void ItemUpdated(SPItemEventProperties properties) 
{ 
    base.ItemUpdated(properties); 
    SPListItem item = properties.ListItem; 
    SetRights(item, ((SPFieldUserValue)item["AssignedTo"]).User, SPRoleType.Reader);      
} 

private void SetRights(SPListItem item, SPPrincipal principal, SPRoleType role) 
{ 
    SPRoleDefinition RoleDefinition = item.ParentList.ParentWeb.RoleDefinitions.GetByType(role); 
    SPRoleAssignment RoleAssignment = new SPRoleAssignment(principal); 
    RoleAssignment.RoleDefinitionBindings.Add(RoleDefinition); 

    if (!item.HasUniqueRoleAssignments) 
    { 
     item.BreakRoleInheritance(true); 
    } 
    item.RoleAssignments.Add(RoleAssignment); 
    item.SystemUpdate(false); 
} 
+0

這與我的想法基本一致。根據我對答案的評論,這可能需要修改以考慮批准狀態(如果批准,則所有用戶都可以閱讀該項目)以及分配給字段中可能有多個用戶的事實。 – 2010-04-01 18:54:22

+0

非常感謝。我在哪裏以及如何使用此代碼?因爲我無法訪問服務器和/或使用加載項。我必須通過共享點設計器來設計系統。這就是我被允許去做的。 – ephieste 2010-04-01 19:31:05

+0

好吧,那麼你的運氣不好,因爲這需要在服務器上安裝的dll類庫中 - 幾乎所有SP中都有這種情況... – kerray 2010-04-01 21:21:46