Scenario:
Claim based authentication is way to go if you want to have dynamic roles for user based on certain attribute of an item/document. But question is how to apply a claim to the item :)
Solution:
Sample code
Code:
using System;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration.Claims;
namespace SKN
{
class Program
{
static void Main(string[] args)
{
int i = 0;
using (SPSite site = new SPSite("http://intranet/Sites/LoadTest"))
{
using (SPWeb web = site.OpenWeb())
{
SPList list = web.Lists.TryGetList("Shared Documents");
SPView view = list.Views["Missing Claims"];
SPQuery query = new SPQuery(view);
foreach (SPListItem item in list.GetItems(query))
{
i = item.ID;
ApplyClaims(web, item, true, "0000" + item.ID.ToString(), true,"Myclient");
}
}
}
Console.Write(i);
Console.ReadKey();
}
///
/// Applies claims to the item.
///
public static void ApplyClaims(SPWeb web, SPListItem item,string claimValue , string client)
{
item.BreakRoleInheritance(false);
SPClaimProviderManager claimMgr = SPClaimProviderManager.Local;
if (claimMgr != null)
{
SPClaim claim = new SPClaim(Microsoft.IdentityModel.Claims.ClaimTypes.Role,
claimValue,
Microsoft.IdentityModel.Claims.ClaimValueTypes.String,
SPOriginalIssuers.Format(SPOriginalIssuerType.TrustedProvider, client));
string userName = claimMgr.EncodeClaim(claim);
// SPUser spUser = web.EnsureUser(userName);
SPUserInfo info = new SPUserInfo
{
LoginName = userName,
Name = claimValue
};
SPRoleAssignment roleAssignmentClaim = new SPRoleAssignment(info.LoginName, info.Email, info.Name, info.Notes);
roleAssignmentClaim.RoleDefinitionBindings.Add(web.RoleDefinitions["Read"]);
item.RoleAssignments.Add(roleAssignmentClaim);
}
}
///
/// Adds the role assignment.
///
/// The item./// The role assignment.public static void AddRoleAssignment(SPListItem item, SPRoleAssignment roleAssignment)
{
bool isNotFound = true;
foreach (SPRoleAssignment roleAssign in item.RoleAssignments)
{
if (roleAssign.Equals(roleAssignment))
{
isNotFound = false;
break;
}
}
if (isNotFound)
{
item.RoleAssignments.Add(roleAssignment);
}
item.SystemUpdate();
}
}
}




0 comments:
Post a Comment