Forum Discussion
ahmed-adel-9
Feb 12, 2023Copper Contributor
Right User Permissions to use ListItem.GetUserEffectivePermissions method
I'm currently using a SharePoint account as a Service account to get files and share them in an application I'm working on using CSOM. I filter the files according to the logged-in user to check if t...
G_Vijai_Kumar
Feb 22, 2023Copper Contributor
Here is the response for your questions
- SharePoint Farm Administrator account can be used to perform search across all SharePoint files
- You can use the Utility.ResolvePrincipal method in SharePoint to get the login name
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
string email = "email address removed for privacy reasons";
string loginName = string.Empty;
using (SPSite site = new SPSite("http://your-sharepoint-site-url-goes-here....."))
{
using (SPWeb web = site.OpenWeb())
{
try
{
SPUser user = web.EnsureUser(email);
loginName = user.LoginName;
}
catch (SPException ex)
{
SPPrincipalInfo principalInfo = Utility.ResolvePrincipal(web, email, SPPrincipalType.User, SPPrincipalSource.Windows, true);
if (principalInfo != null)
{
loginName = principalInfo.LoginName;
}
}
}
}
Console.WriteLine("The login name for the email address {0} is {1}", email, loginName);
- Here is the source for GetUserEffectivePermissions method in SharePoint to check if the logged-in user has permission to view file.
string fileUrl = "http://document-library-filename-url";
SPUser currentUser = SPContext.Current.Web.CurrentUser;
using (SPSite site = new SPSite("http://your-sharepoint-site-url"))
{
using (SPWeb web = site.OpenWeb())
{
SPFile file = web.GetFile(fileUrl);
if (file.Exists)
{
SPRoleDefinitionBindingCollection permissionCollection = file.Item.RoleAssignments.GetEffectivePermissions(currentUser);
if (permissionCollection.Web.AllowAnonymousAccess && permissionCollection.Contains(SPBasePermissions.ViewListItems))
{
}
else if (permissionCollection.Contains(SPBasePermissions.ViewListItems))
{
}
else
{
}
}
else
{
// The file does not exist
}
}
}
- SharePoint Farm Administrator account can be used to perform search across all SharePoint files
- You can use the Utility.ResolvePrincipal method in SharePoint to get the login name
using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
string email = "email address removed for privacy reasons";
string loginName = string.Empty;
using (SPSite site = new SPSite("http://your-sharepoint-site-url-goes-here....."))
{
using (SPWeb web = site.OpenWeb())
{
try
{
SPUser user = web.EnsureUser(email);
loginName = user.LoginName;
}
catch (SPException ex)
{
SPPrincipalInfo principalInfo = Utility.ResolvePrincipal(web, email, SPPrincipalType.User, SPPrincipalSource.Windows, true);
if (principalInfo != null)
{
loginName = principalInfo.LoginName;
}
}
}
}
Console.WriteLine("The login name for the email address {0} is {1}", email, loginName);
- Here is the source for GetUserEffectivePermissions method in SharePoint to check if the logged-in user has permission to view file.
string fileUrl = "http://document-library-filename-url";
SPUser currentUser = SPContext.Current.Web.CurrentUser;
using (SPSite site = new SPSite("http://your-sharepoint-site-url"))
{
using (SPWeb web = site.OpenWeb())
{
SPFile file = web.GetFile(fileUrl);
if (file.Exists)
{
SPRoleDefinitionBindingCollection permissionCollection = file.Item.RoleAssignments.GetEffectivePermissions(currentUser);
if (permissionCollection.Web.AllowAnonymousAccess && permissionCollection.Contains(SPBasePermissions.ViewListItems))
{
}
else if (permissionCollection.Contains(SPBasePermissions.ViewListItems))
{
}
else
{
}
}
else
{
// The file does not exist
}
}
}