Home > APPLICATION DEVELOPMENT, SECURITY, SHAREPOINT 2007 > Item Level Security (ILS)

Item Level Security (ILS)

november 5, 2009

Met de functie Item Level Security kunnen gebruikers specifieke beveiliging instellen voor elk item in een lijst of bibliotheek. Dit betekent dat, als er items worden toegevoegd aan de bibliotheek, de gebruiker kan aangeven wie het item kan bekijken. Als u de beveiliging van een item wilt instellen heeft de beheerder de mogelijkheid om toegang te geven tot een individu of een groep binnen de Active Directory (AD) en/of SharePoint.
Beveiliging op item niveau is handig als specifieke documenten alleen bepaalde gebruikers moeten kunnen zien en te verhinderen dat anderen toegang tot deze documenten krijgen.
Een interne portal van een bedrijf kan bijvoorbeeld personeelsbeloningen alleen aan een specifieke werknemer tonen. Bij beveiliging op item niveau kunnen alleen die gebruikers die documenten bekijken zonder dezelfde documenten beschikbaar te maken voor het hele bedrijf. Het nadeel van de beveiliging op item niveau is de hoofd pijn die dit met zich meebrengt voor beheerders in gevallen waar het is niet duidelijk wie de beoogde viewer is. 

Voor meer informatie over beveiliging van privacygevoelige documenten verwijs ik u door naar mijn eerder blog  Beveiliging van privacygevoelige documenten in SharePoint.

Om beveiliging om item niveau (Item Level Security) beter toe te lichten, heb ik een Workflow Demo gemaakt, die automatisch bij het uploaden van een document binnen een documentbibliotheek de rechten van een document item inricht.

Workflow Demo



using System;

using System.Workflow.Activities;

using Microsoft.SharePoint;

using Microsoft.SharePoint.Workflow;

namespace ConfigurePermissionsWorkflow

{

    public sealed partial class Workflow1 : SequentialWorkflowActivity

    {

        public Workflow1()

        {

            InitializeComponent();

        }

        public Guid workflowId = default(Guid);

        public SPWorkflowActivationProperties workflowProperties = new SPWorkflowActivationProperties();

        private bool isFinished = false;

        Guid webId;

        Guid siteId;

        Guid listId;

        int itemId;

        private void onWorkflowActivated1_Invoked(object sender, ExternalDataEventArgs e)

        {

            webId = workflowProperties.WebId;

            siteId = workflowProperties.SiteId;

            listId = workflowProperties.ListId;

            itemId = workflowProperties.ItemId;

        }

        private static SPUser GetUser(SPItem item, SPField userField)

        {

            string currentValue = item[userField.Title].ToString();

            var field = (SPFieldUser)userField;

            var fieldValue = (SPFieldUserValue)field.GetFieldValue(currentValue);

            return fieldValue.User;

        }

        private void codeActivity1_ExecuteCode(object sender, EventArgs e)        { }

        private void notFinished(object sender, ConditionalEventArgs e)

        {

            e.Result = !isFinished;

        }

        private void onWorkflowItemChanged1_Invoked(object sender, ExternalDataEventArgs e)

        {

            var site = new SPSite(siteId);

            SPWeb web = site.OpenWeb(webId);

            var list = (SPDocumentLibrary)web.Lists[listId];

            SPListItem listItem = list.GetItemById(itemId);

            listItem.BreakRoleInheritance(false);

            SPRoleAssignmentCollection currentRoles = listItem.RoleAssignments;

            foreach (SPRoleAssignment role in currentRoles)

            {

                role.RoleDefinitionBindings.RemoveAll();

                role.Update();

            }

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

            string groupName = "MOSS2007 Portal Visitors";

            SPGroup group = web.SiteGroups[groupName];

            var roleAssignmentTestGroup = new SPRoleAssignment(group);

            roleAssignmentTestGroup.RoleDefinitionBindings.Add(roleDef);

            currentRoles.Add(roleAssignmentTestGroup);

            //-------Rol van de Beheerder----------------------------------------------------------------

            string username = GetUser(listItem, listItem.Fields["Created By"]).LoginName;

            SPRoleDefinition roleDefBeheerder =

             web.RoleDefinitions.GetByType(SPRoleType.Contributor);

            var roleAssignment =

             new SPRoleAssignment(

                 username,

                 string.Empty,

                 string.Empty,

                 string.Empty);

            roleAssignment.RoleDefinitionBindings.Add(roleDefBeheerder);

            //update list item with new assignment

            currentRoles.Add(roleAssignment);

            listItem.SystemUpdate();

            //break while loop

            isFinished = true;

        }

    }

}