I was writing a workflow using SharePoint designer wherein at certain steps tasks were getting created and assigned to different user. But the problem with that was that any user having appropriate rights on the tasks list was able to edit the task.
Below are the two methods using which we can have only the assigned to user having the rights on that task.
It can be done using Event Receiver or within the SharePoint workflow using special permissions property.
public override void ItemAdded(SPItemEventProperties properties)
{
// Name of the List
if (properties.ListTitle == “Tasks”)
{
// Get the SPSite Object
SPSite objSite = new SPSite(“http://servername:portname”);
// Point to the top level web site within it
SPWeb objWeb = objSite.OpenWeb();
// get the task list item getting created
SPListItem myListItem = properties.ListItem;
// get the id of the assigned to user
// we want that only assigned to user should have full rights on that task
string userAssignedTo=myListItem[“Assigned To”].ToString();
int index = userAssignedTo.IndexOf(‘;’);
int id = Int32.Parse(userAssignedTo.Substring(0, index));
// get the SPUser from the id
SPUser user = objWeb.SiteUsers.GetByID(id);
// break the role inheritance
myListItem.BreakRoleInheritance(false);
// webroledefinitions – Full Right, Design, Contribute and Read
SPRoleDefinitionCollection webroledefinitions = objWeb.RoleDefinitions;
SPRoleAssignment roleassignment = new SPRoleAssignment(user);
roleassignment.RoleDefinitionBindings.Add(webroledefinitions[“Full Control”]);
myListItem.RoleAssignments.Add(roleassignment);
// give full control right to the assigned to user
roleassignment.Update();
}
}
Or within workflow as
// handler for create task activity
private void createTask1_MethodInvoking(object sender, EventArgs e)
{
//Specify properties for the task
createTask1.TaskProperties.AssignedTo = @”domainusername”;
createTask1.TaskProperties.Title = @”Please complete the task”;
createTask1.TaskProperties.Description = “This is sample SharePoint Task”;
createTask1.TaskProperties.DueDate = DateTime.Now.AddDays(7);
createTask1.TaskProperties.EmailBody = “This is the sample<b><i> email body </b></i>”;
createTask1.TaskProperties.SendEmailNotification = true;
// Define a HybridDictionary object
HybridDictionary permsCollection = new HybridDictionary();
// Give Administrator rights to the user to whom the task has been assigned
permsCollection.Add(createTask1.TaskProperties.AssignedTo, SPRoleType.Administrator);
// SpecialPermissions -the SpecialPermissions property in your code will strip out all existing permissions inherited from
// the parent list(Workflow Task List) and only adds permissions for each pair you added to the hashtable
createTask1.SpecialPermissions = permsCollection;
}
That’s it ….
Discover more from Nishant Rana's Weblog
Subscribe to get the latest posts sent to your email.

Iam facing the same problem any user can access others task, where to put the code provided ,do it like web part??
can u give me more details
LikeLike
Nishant,
Please let me know how to show only tasks assigned for current user only, I want to hide all others tasks.
Also where to add this code? Please provide step by step details. My workflow is designed in SPD.
LikeLike
Thanks Nishant,
It helped me a lot.
LikeLike
Nishant,
Please lemme know how to grant access to list for particular user programmatically.
LikeLike
where this code can be written ? Pls guide me as I am newbie to SP
LikeLike
Hi,
You could use the above logic wherever it is required. It could be Event Receivers or it could some utility application.
You need to make use of SharePoint Object Model here.
http://www.codeproject.com/KB/sharepoint/Access_SharePoint_Objects.aspx
Regards,
Nishant Rana
LikeLike
Thank you so much for this post! One question..the event receivers, do you have to implement this as a feature?
LikeLike
thank you for your post
but after i add the event receiver users can not add task item it give me error
The form cannot be submitted.
The form cannot be submitted to the specified SharePoint list or document library. The SharePoint location may be read-only or you may not have permissions to access it.
LikeLike
to set edit permission only to task “AssignedTo” user can be achived by associating of a simple workflow to Task /Workflow task list.
SPD has an activity called “Grant” and “Remove” Permission. This can be used to set permission only to “Assigned To” user or Group
LikeLike
thank’s
LikeLike
The code below is not working. Permission not set to the specified user. Any idea ?
// handler for create task activity
private void createTask1_MethodInvoking(object sender, EventArgs e)
{
//Specify properties for the task
createTask1.TaskProperties.AssignedTo = @”domainusername”;
createTask1.TaskProperties.Title = @”Please complete the task”;
createTask1.TaskProperties.Description = “This is sample SharePoint Task”;
createTask1.TaskProperties.DueDate = DateTime.Now.AddDays(7);
createTask1.TaskProperties.EmailBody = “This is the sample email body ”;
createTask1.TaskProperties.SendEmailNotification = true;
// Define a HybridDictionary object
HybridDictionary permsCollection = new HybridDictionary();
// Give Administrator rights to the user to whom the task has been assigned
permsCollection.Add(createTask1.TaskProperties.AssignedTo, SPRoleType.Administrator);
// SpecialPermissions -the SpecialPermissions property in your code will strip out all existing permissions inherited from
// the parent list(Workflow Task List) and only adds permissions for each pair you added to the hashtable
createTask1.SpecialPermissions = permsCollection;
}
LikeLike