动态更改用户权限

时间:2010-04-01 15:34:03

标签: sharepoint sharepoint-2007 workflow

我正在SharePoint上设计一个系统。有一个项目的批准列表。成员可以批准,拒绝和编辑项目。批准列表中的一个必须在批准时填充项目中的“分配给”字段。添加到“已分配到”字段的用户应该能够在批准后编辑项目的内容。那么,在将用户添加到特定项目的字段后,如何为用户提供编辑权限?

情况是:

  

批准清单:A,B,C(编辑,查看   许可)

     

用户:x,y,z ....(无权限,查看   批准后)

     

项目:item1,item2,item3 ....

项目是不可见的。批准了item1并将X添加到“已分配给”字段。这意味着这个项目由X负责。但是X没有获得编辑许可。我们不能为每个项目赋予X编辑权限。他应该在将项目写入“已分配到”字段后编辑这些项目。

如何在SharePoint中创建此工作流程?请急需帮助。

2 个答案:

答案 0 :(得分:1)

不是100%确定它完全清楚你想要实现的目标,但是......

根据我对您的问题的理解,您要做的是根据该列表项的分配给字段中的值为列表项分配唯一权限。

我这样做的方法是为列表项更新/批准等时运行的项目列表创建一个事件处理程序。它会: -

  1. 读取分配给字段中的值
  2. 对列表项
  3. 的中断权限继承
  4. 为分配给该项的字段编辑权限分配用户。

答案 1 :(得分:1)

正如Paul Lucas所提到的,你可以使用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);
}