WindowsPrincipal.IsInRole()が予期した結果を返さない
-
08-07-2019 - |
質問
だからここに私の現在のコードがあります:
List<string> rowGroups = GetFileGroups((int)row.Cells["document_security_type"].Value);
bool found = false;
System.Security.Principal.WindowsPrincipal p = new System.Security.Principal.WindowsPrincipal(System.Security.Principal.WindowsIdentity.GetCurrent());
foreach (string group in rowGroups)
{
if (p.IsInRole(group))
{
found = true;
break;
}
}
これは数か月前に誰かによって行われましたが、なぜ機能しないのかを把握するのが困難です。同社は最近、あるドメイン名から別のドメイン名に移行しました。そのため、p.IsInRole(<!> quot; String <!> quot;)関数がどのドメインコントローラーを使用するのか興味がありました。コンピューターが使用しているものは何でもデフォルトのDCを使用すると想定しています。
奇妙なことは、これが実行されているオフィスのコンピューターが2つの別々のドメインにある可能性があることです。 List<string>
オブジェクトでは、両方のドメインを使用できます。そのため、<!> quot; domainA \ groupA <!> quot;、<!> quot; domainA \ userB <!> quot;、domainB \ groupC <!> quot ;、および/または<!>などのアイテムを含めることができます。 quot; domainB \ userD <!> quot;。
したがって、私の主な問題は、IsInRole関数が決してtrueを返さないことです。私はそれが必要であることを知っていますが、domainA \ Domainユーザーでテストしても、falseが返されます。
アイデアはありますか?コードの変更は可能ですが、望ましくありません。私はそれをコンパイルすることもできます...
解決 2
まあ、問題を解決するには、グループ名の代わりにグループの各ユーザーを具体的に追加する必要がありました...
他にアイデアはありますか
他のヒント
指摘しなければならないのは、実際に文字列内で '\'文字を正しくエスケープしているということですか? <!> quot; domainA \\ groupA <!> quot;?
のように役割ベースのセキュリティのために、Active DirectoryでOutlook電子メールリストを使用しようとすると問題が発生しました。これらはActive Directoryに表示され、実際のセキュリティグループ(ACLで参照できるグループなど)と区別するのは困難です。使用しているグループがセキュリティグループであることを管理者に確認してもらいます。