情况一:针对使用SharePoint Designer定制的工作流,或者模板提供的工作流
我们可以使用EventHandler扩展的方法,在新建任务的任务列表ItemAdded EventHandler中,加入权限控制语句
把当前item的权限只分配给任务Assign To 对象,或者赋给其它用户只读的权限
Code
private void SetOwnerAsOnlyEditor(SPListItem item)
{
SPWeb myweb1 = item.Web;
/**//**/
/**/////get the task owner from the item. 'Assigned To' is a built-in property, so it should be in all lists.
string authorValue = item["Assigned To"].ToString();
SPFieldUserValue authorUserValue = new SPFieldUserValue(myweb1, authorValue);
SPUser authorUser = authorUserValue.User;
//break the security of the item from the list, but keep the permissions
item.BreakRoleInheritance(true);
SPRoleAssignment roleassignment = new SPRoleAssignment(authorUser.LoginName, authorUser.Email, authorUser.Name, authorUser.Name);
roleassignment.RoleDefinitionBindings.Add(myweb1.RoleDefinitions["Contribute"]);
foreach (SPRoleAssignment roleAssignment in item.RoleAssignments)
{
//delete the existing permissions
roleAssignment.RoleDefinitionBindings.RemoveAll();
//add the reader permission
//change the permissions of everyone with access to this item so they are readers only
roleAssignment.RoleDefinitionBindings.Add(myweb1.RoleDefinitions["Read"]);
roleAssignment.Update();
// item.Update();
}
item.RoleAssignments.Add(roleassignment);
item.Update();
}
源代码
情况二:针对使用VS2005编码定制的工作流
对CreateTask中的SpecialPermission属性进行赋值,将要授予权限的用户写入其中。
这里要注意的有两点:
1、要使用SpecialPermission,首先要定义一个全局公有变量
public HybridDictionary task1permission = new HybridDictionary();
2、要将这个新变量赋给CreateTask的SpecialPermission属性,方法是点击SpecialPermission属性旁边蓝色的感叹号,这是才会弹出绑定属性的窗口,才可以将此变量绑定。
以上两点完成后,就可以实现权限的控制了。
关键代码是:
task1permission.Add(taskProps.AssignedTo, SPRoleType.Contributor);
|