我已经构建了自定义成员资格和角色提供程序。用户是属于公司的一些客户,我使用公司作为角色。
我想创建SharePoint Group并向其添加更多公司(例如行业类型),然后通过SPGroup进行重定向和安全性。
如何为当前登录的用户检索SPGroup? 我想在我的自定义登录页面中这样做,所以另一个问题是如何检索SPUser或SPGroup知道登录名?
这就是我现在所拥有的:
private List GetGroupsForUser(List roleAccounts)
{
List groups = new List();
SPSecurity.RunWithElevatedPrivileges(
delegate()
{
using (SPSite site = new SPSite(SPContext.Current.Web.Site.ID))
{
SPUserCollection users = site.RootWeb.SiteUsers;
foreach (string account in roleAccounts)
{
SPGroupCollection accGroups = users[account].Groups;
foreach (SPGroup spg in groups)
{
groups.Add(spg);
}
}
}
}
);
return groups;
}
private string GetRoleManagerName()
{
foreach (KeyValuePair setting in SPContext.Current.Site.WebApplication.IisSettings)
{
if (string.IsNullOrEmpty(setting.Value.RoleManager) == false)
return setting.Value.RoleManager.ToLower();
}
return null;
}
private List GetSpAccounts()
{
List roleAccounts = new List();
string roleProviderName = GetRoleManagerName();
foreach (string role in Roles.GetRolesForUser(login.UserName))
{
roleAccounts.Add(roleProviderName + ":" + role.ToLower());
}
return roleAccounts;
}
// and now I can use it
List roleAccounts = GetSpAccounts();
List groups = GetGroupsForUser(roleAccounts);
但我有一种感觉,我不应该像这样手动这样做。如果只将角色添加到组中,目标受众将如何工作?
答案 0 :(得分:2)
使用SPUser类的OwnedGroups属性返回用户拥有的组的集合。
更新误解了这个问题:
更新,第三次魅力。那么你想根据他们的角色找出用户所在的群组? 这是上述两次回答尝试的结合:
var matched = from r in SPContext.Current.Web.CurrentUser.Roles
where r.Name = [Role]
select r.Groups;
重要提示,Roles属性在下一版本的SharePoint中不起作用! 我个人认为SPContext.Current.Web.CurrentUser.Groups可以更容易地找出用户所在的组,但它忽略了你的角色要求。