【问题标题】:How do I add claims from a LinqToSql list?如何从 LinqToSql 列表中添加声明?
【发布时间】:2017-11-09 18:36:43
【问题描述】:

我创建了一个使用 Active Directory 和 Owin 对我的用户进行身份验证的应用程序。应用程序的范围要求我使用现有 CMS 数据库中定义的角色来授权自定义应用程序中的用户。这是我尝试过的:

CMSContext _cms = new CMSContext();
var user = @"STRING\" + userPrincipal.Name;
var result = (from rls in _cms.CMSRoles
              join urs in _cms.CMSUserRoles on rls.RoleID equals urs.RoleID
              join usrs in _cms.CMSUser on urs.UserID equals usrs.UserID
              where usrs.Username == user
              select rls.RoleName).ToList();
//using foreach to get roles one by one
foreach(var @group in groups)
{
    identity.AddClaim(new Claim(ClaimTypes.Role, @groups.?));
}

我提前为问号道歉,但目前我遇到了困难。我找不到,也想不出任何可以让我在这个 for 循环中按顺序将它们拉出来的东西。如果我从 AD 添加声明,我会尝试遵循我通常会做的事情,这很简单:

var groups = userPrincipal.GetAuthorizationGroups();
foreach (var @group in groups)
{
    identity.AddClaim(new Claim(ClaimTypes.Role, @group.Name));
}

提前致谢!

【问题讨论】:

  • 由于您选择了 RoleName,我认为它只是一个字符串,我希望您只使用 group 值:identity.AddClaim(new Claim(ClaimTypes.Role, @group));
  • 他不是foreaching 超过results,而是超过groups,这在他的代码示例中没有披露。 @Skullomania - groups 来自哪里?
  • @PatrickArtner 这是我的问题的一部分,它应该是结果。我已经想通了,很快就会发布解决方案

标签: c# asp.net-mvc owin claims-based-identity


【解决方案1】:

它正在寻找 @group 名称,因此它需要转换为字符串。请参阅以下内容:

CMSContext _cms = new CMSContext();
var user = @"STRING\" + userPrincipal.Name;
var result = (from rls in _cms.CMSRoles
          join urs in _cms.CMSUserRoles on rls.RoleID equals urs.RoleID
          join usrs in _cms.CMSUser on urs.UserID equals usrs.UserID
          where usrs.Username == user
          select rls.RoleName).ToList();
//using foreach to get roles one by one
foreach(var @group in groups)
{
    identity.AddClaim(new Claim(ClaimTypes.Role, @group.ToString()));
}

【讨论】:

    猜你喜欢
    • 2019-11-26
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    • 2013-12-21
    相关资源
    最近更新 更多