Finding all the roles of group for user with Reader by using Elevated Privileges

 

Hi,

 

Few days back while coding for a webpart in a Sharepoint site, I had to check the roles of all the groups the user was linked to. The code to do it seems to be very simple.

foreach (SPGroup ospGroup in SPContext.Current.Web.CurrentUser.Groups)
{
     foreach (SPRole sr in ospGroup.Roles)
     {
        // do what you want here
     }
}

This code works fine till you are running with a user which has contribute permission. But if the user is of Reader permission, this code will through Authorization Exception.  This is there is Sharepoint by default and design.

 

But there can be situation where you have to check the roles for user with reader permission. For this reason we need to run that small amount of code with elevated permission.  The code to do the same is here.

 

  foreach (SPGroup ospGroup in SPContext.Current.Web.CurrentUser.Groups)

  {

         SPSite siteColl = SPContext.Current.Site;

 

         SPSecurity.RunWithElevatedPrivileges(delegate()

         {

             using (SPSite site = new SPSite(siteColl.ID))

             {

                 using (SPWeb web = site.OpenWeb())

                 {

                     foreach (SPRole sr in web.Groups[ospGroup.Name].Roles)

                     {

    // do what you want here

                     }

                 }

             }

         });
  }

In the above example I have used an anonymous delegate, If you want you can also call a function.

 

After you elevate the privileges of your code by calling RunWithElevatedPrivileges within the context of a Windows Sharepoint Services request, you must then create an instance of the SPSite class and the SPWeb class. You cannot use the objects available through the Microsoft.SharePoint.SPContext.Current property because those objects were created in the security context of the current user.

 

The code will be executed with the identity of Sharepoint system account, so this code should be used with cautions. The system user has full administrative privileges on each and every site collection.

 

Vikram

No Comments