Adding Item Level Security to a List Item

Item Level Security for the User:

 public override void ItemAdded(SPItemEventProperties properties)
{
            SPUser usr = null;
            using (SPWeb web = properties.Web)
            {
                usr = web.SiteUsers.GetByID(web.CurrentUser.ID);

            }

            SPSecurity.RunWithElevatedPrivileges(delegate()
            {
                using (SPSite site = new SPSite(properties.SiteId))
                {
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPList lst = web.Lists[properties.ListId];
                        SPListItem li = lst.GetItemById(properties.ListItemId);

                        SPRoleDefinition rd = web.RoleDefinitions.GetByType(SPRoleType.Reader);

                        SPRoleAssignment ra = new SPRoleAssignment((SPPrincipal)usr);

                        ra.RoleDefinitionBindings.Add(rd);
                        if (!li.HasUniqueRoleAssignments)
                        {
                            li.BreakRoleInheritance(false);
                        }
                        for (int i = 0; i <= li.RoleAssignments.Count - 1; i++)
                        {
                            li.RoleAssignments.Remove(i);
                        }
                        li.RoleAssignments.Add(ra);
                        li.Update();

                    }
                }
            });
}

Item Level Security for a Group:

  public override void ItemAdded(SPItemEventProperties properties)
{
   SPGroup grp = null;
            string groupname = "ListUsers";

            SPSecurity.RunWithElevatedPrivileges(delegate()
                        {
                            using (SPSite site = new SPSite(properties.SiteId))
                            {
                                using (SPWeb web = site.OpenWeb())
                                {
                                    web.AllowUnsafeUpdates = true;
                                    SPGroupCollection groupCollection = web.Groups;
                                    if (string.IsNullOrEmpty(groupname) || (groupCollection == null) || (groupCollection.Count == 0))
                                    {
                                        throw new ArgumentNullException("Security Group Not Found");
                                    }
                                    else
                                    {
                                        grp = groupCollection[groupname];
                                        SPList lst = web.Lists[properties.ListId];
                                        SPListItem li = lst.GetItemById(properties.ListItemId);

                                        SPRoleDefinition rd = web.RoleDefinitions.GetByType(SPRoleType.Reader);

                                        SPRoleAssignment ra = new SPRoleAssignment((SPPrincipal)grp);

                                        ra.RoleDefinitionBindings.Add(rd);
                                        if (!li.HasUniqueRoleAssignments)
                                        {
                                            li.BreakRoleInheritance(false);
                                        }
                                        for (int i = 0; i <= li.RoleAssignments.Count - 1; i++)
                                        {
                                            li.RoleAssignments.Remove(i);
                                        }
                                        li.RoleAssignments.Add(ra);
                                        li.Update();
                                        web.AllowUnsafeUpdates = false;
                                    }
                                }
                            }
                        });
}

0 comments:

Post a Comment