?
Solved

Setting List Item Permissions in Sharepoint 2007?

Posted on 2007-11-20
8
Medium Priority
?
1,919 Views
Last Modified: 2009-12-16
Hi All -
I'm using C#

I'm trying to find a way to set permissions for each item.

thanks
0
Comment
Question by:JordanBlackler
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 4
8 Comments
 
LVL 15

Accepted Solution

by:
liebrand earned 2000 total points
ID: 20320365
This is assuming you already have the item loaded into an SPListItem object.

SPListItem item = list.Items[1]; // gets an item out of the list
SPRoleDefinition definition = web.RoleDefinitions.GetByType(SPRoleType.Administrator);
 
SPRoleAssignment assignment = new SPRoleAssignment(@"domain\user", "email@company.com", null, null);
assignment.RoleDefinitionBindings.Add(definition);
 
if(!item.HasUniqueRoleAssignments)
   item.BreakRoleInheritance(false); // true if you want to copy permissions
 
item.RoleAssignments.Add(assignment);
item.Update();

Open in new window

0
 

Author Comment

by:JordanBlackler
ID: 20320602
I get this error:
Value does not fall within the expected range.   at Microsoft.SharePoint.SPRoleAssignmentCollection.UpdateAssignment(Int32 principalId, SPRoleDefinitionBindingCollection bindings, Boolean addOnly)
   at Microsoft.SharePoint.SPRoleAssignmentCollection.Add(SPRoleAssignment roleAssignment)
   at _Default.Button1_Click(Object sender, EventArgs e)
   at System.Web.UI.WebControls.Button.OnClick(EventArgs e)
   at System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument)
   at System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument)
   at System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
   at System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)


        SPWeb web = SPControl.GetContextWeb(Context);
        SPSite site = SPControl.GetContextSite(Context);
        //site.CatchAccessDeniedException = false;
        SPWeb subSite = site.AllWebs["mySite"];
        SPListCollection allSiteLists = subSite.Lists;
        SPList list = subSite.Lists["myList"];
 
        SPListItem item = list.Items[1]; // gets an item out of the list
        SPRoleDefinition definition = web.RoleDefinitions.GetByType(SPRoleType.Administrator);
 
        SPRoleAssignment assignment = new SPRoleAssignment(@"na\test", "tester@test.com", null, null);
        assignment.RoleDefinitionBindings.Add(definition);
 
        if (!item.HasUniqueRoleAssignments)
            item.BreakRoleInheritance(false); // true if you want to copy permissions
 
        item.RoleAssignments.Add(assignment);
        item.Update();

Open in new window

0
 
LVL 15

Expert Comment

by:liebrand
ID: 20320655
My code references list.Items[1] ... which would actually be the second item in the list.  If you only have one item in your list, make sure you code is changed to list.Items[0]

If that does not resolve the error -- let me know which line the error is failing on.

Thanks
0
NEW Veeam Agent for Microsoft Windows

Backup and recover physical and cloud-based servers and workstations, as well as endpoint devices that belong to remote users. Avoid downtime and data loss quickly and easily for Windows-based physical or public cloud-based workloads!

 

Author Comment

by:JordanBlackler
ID: 20320751
new error:
The security validation for this page is invalid. Click Back in your Web browser, refresh the page, and try your operation again.   at Microsoft.SharePoint.Library.SPRequestInternalClass.UpdateRoleAssignment(String bstrUrl, Guid& pguidScopeId, Int32 lPrincipalID, Object& pvarArrIdRolesToAdd, Object& pvarArrIdRolesToRemove)
   at Microsoft.SharePoint.Library.SPRequest.UpdateRoleAssignment(String bstrUrl, Guid& pguidScopeId, Int32 lPrincipalID, Object& pvarArrIdRolesToAdd, Object& pvarArrIdRolesToRemove)
        SPSite Site = new SPSite("http://****");
        SPWeb web = Site.OpenWeb();
        SPList list = web.Lists["myList"]; 
        
        SPListItem item = list.Items[1]; // gets an item out of the list
        SPRoleDefinition definition = web.RoleDefinitions.GetByType(SPRoleType.Administrator);
 
        SPRoleAssignment assignment = new SPRoleAssignment(@"na\tester", "tester@test.com", null, null);
        assignment.RoleDefinitionBindings.Add(definition);
 
        if (!item.HasUniqueRoleAssignments)
            item.BreakRoleInheritance(false); // true if you want to copy permissions
 
        item.RoleAssignments.Add(assignment);
        item.Update();

Open in new window

0
 
LVL 15

Expert Comment

by:liebrand
ID: 20320853
right after the SPWeb web = Site.OpenWeb() line put the following:
web.AllowUnsafeUpdates = true;

Open in new window

0
 

Author Comment

by:JordanBlackler
ID: 20321368
I still get that error, but added me to the list with Full Control.
When i click the back button when i get the erroe  and run the code again, i don't get an error and it finally gives the user that i requested Full Control.

Any ideas?
here is my code.
protected void AddPermissions()
    {
        SPSite Site = new SPSite("http://****");
        SPWeb web = Site.OpenWeb();
        web.AllowUnsafeUpdates = true;
        SPList list = web.Lists["myList"];
        SPListItem item = list.GetItemById(Convert.ToInt32(lblUnique.Text));
                
        SPRoleDefinition definition = web.RoleDefinitions.GetByType(SPRoleType.Administrator);
 
        SPRoleAssignment assignment = new SPRoleAssignment(@"na\Tester", "Tester@test.com", null, null);
        assignment.RoleDefinitionBindings.Add(definition);
 
        if (!item.HasUniqueRoleAssignments)
            item.BreakRoleInheritance(false); // true if you want to copy permissions
 
        item.RoleAssignments.Add(assignment);
        item.Update();
    }
 
 
protected void btnSecondSave_Click(object sender, EventArgs e)
    {
           AddPermissions();
 
           SPSite site = SPControl.GetContextSite(Context);
           site.CatchAccessDeniedException = false;
           SPWeb subSite = site.AllWebs["mySite"];
 
           SPListCollection allSiteLists = subSite.Lists;
           SPList list = subSite.Lists["myList"];
 
           SPListItemCollection listItems = list.Items;
           SPListItem newItem = list.GetItemById(Convert.ToInt32(lblUnique.Text));
           subSite.AllowUnsafeUpdates = true;
 
           newItem["Status"] = lblStatus.Text;
           newItem["StartDate"] = txtStartDate.Text;
           //
           // 
           newItem.Update();
}

Open in new window

0
 
LVL 15

Expert Comment

by:liebrand
ID: 20321400
Add the web.AllowUnsafeUpdates = true; after you break the inheritance.  I forgot to mention this -- the BreakRoleInheritance method reverts the AllowUnsafeUpdates back to false.
0
 

Author Comment

by:JordanBlackler
ID: 20321612
yup, that did it. Thanks very much.
0

Featured Post

Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Pimping Sharepoint 2007 without Server-Side Code Part 1 One of my biggest frustrations with Sharepoint 2007 in the corporate world is that while good-intentioned managers lock down the more interesting capabilities of Sharepoint programming in…
In case you ever have to remove a faulty web part from a page , add the following to the end of the page url ?contents=1
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question