2017-11-09 6 views
1

Active DirectoryとOwinを使用してユーザーを認証するアプリケーションを作成しました。アプリケーションの範囲では、既存のCMSデータベースで定義されているロールを使用して、カスタムアプリケーション内のユーザーを承認する必要があります。私が試したことは次のとおりです。LinqToSqlリストからクレームを追加するにはどうすればよいですか?

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.?)); 
} 

私は事前に疑問符をお詫びしますが、現在私は立ち往生しています。私は見つけることができないし、このループの中で私がそれらを順番に引き出すことを可能にするものは何も考えていない。

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

感謝を事前に:私は、私は単純である、ADからのクレームを追加した場合、私は通常、どうなるものをフォローしようとしています!

+0

あなたは私は単なる文字列であると仮定ロール名を、選択されたので、私はあなただけ 'group'値使用するであろう期待::' identity.AddClaim(新しいクレームを(ClaimTypes.Role、@group以下を参照してください。 )); ' –

+0

彼は' result'sを 'foreach 'していませんが、コードサンプルでは公開されていない' groups'を超えています。 @スカニア - グループはどこから来ますか? –

+0

@PatrickArtnerは私の問題の一部でした。私はそれを理解して、すぐに解決策を投稿します – Skullomania

答えて

0

@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())); 
} 
関連する問題