3

だからここに私の現在のコードがあります:

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("String") 関数が使用するドメイン コントローラーに興味がありました。コンピューターが使用しているものは何でも、デフォルトの DC を使用すると想定しています。

奇妙な点は、これが実行されているオフィス内のコンピューターが 2 つの別々のドメインにある可能性があることです。オブジェクトではList<string>、両方のドメインが可能です。そのため、「domainA\groupA」、「domainA\userB」、「domainB\groupC」、「domainB\userD」などの項目が含まれる可能性があります。

したがって、私の主な問題は、IsInRole 関数が決して true を返さないことです。私はそれが必要であることを知っています.domainA\Domainユーザーでテストしても、falseが返されます.

何か案は?コードを変更することは可能ですが、望ましくありません。私は100%ではありませんが、コンパイルすることさえできます...

4

3 に答える 3

0

人々が役割ベースのセキュリティのためにActiveDirectoryでOutlook電子メールリストを使用しようとすると問題が発生します。これらはActiveDirectoryに表示され、実際のセキュリティグループ(ACLなどで参照できるもの)と区別するのは困難です。使用しているグループがセキュリティグループであることを管理者に確認してもらいます。

于 2008-11-14T19:51:44.100 に答える
0

指摘しなければならないのは、実際に文字列内で「\」文字を正しくエスケープしていますか? 「ドメインA\\グループA」のように?

于 2008-11-12T20:01:20.653 に答える
0

問題を解決するには、グループ名ではなく、グループの各ユーザーを具体的に追加する必要がありました。

于 2008-11-14T19:41:20.517 に答える