単純なアプリケーションを 3 つのアセンブリに分割しています。1 つは、ユーザーがレジストリからキーを読み取れるようにするクライアント フォームです。2 つ目は、ユーザーがログインする認証フォームです。3 つ目は、実際の作業を行うすべてのメソッドを含む .dll ライブラリです。
ここにある Declarative Security Checks の実行に関する MSDN チュートリアルに従いましたhttp://msdn.microsoft.com/en-us/library/dswfd229.aspxしかし、何かがまだ機能しません。
次のような GenericPrincipal オブジェクトを作成します。
public static void CreatePrincipal(string user)
{
GenericIdentity MyIdentity = new GenericIdentity(user);
String[] MyString = { "Administrator", "User" };
GenericPrincipal MyPrincipal =
new GenericPrincipal(MyIdentity, MyString);
Thread.CurrentPrincipal = MyPrincipal;
}
これは、.dll アセンブリの CustomPrincipal クラスにあります。
同じアセンブリに、次のメソッドを持つ RegistryOperations クラスがあります。
[PrincipalPermissionAttribute(SecurityAction.Demand, Name = "admin1", Role = "User")]
public static string ReadDeclarative()
{
...
}
派手なものはありません。私の「承認」アセンブリには、承認のために .dll メソッドを呼び出す GUI があります。
private void btnLogin_Click(object sender, EventArgs e)
{
CustomPrincipal.CreatePrincipal(txtUsername.Text);
}
最後に、3 番目の「クライアント」アセンブリで、.dll メソッドを呼び出してレジストリ キーを読み取ります。
private void btnReadRegistry_Click(object sender, EventArgs e)
{
txtContents.Text = RegistryOperations.ReadDeclarative();
}
これはうまくいきません。認証アセンブリを介してログインし、レジストリを読み取ろうとすると、プリンシパル アクセス許可の要求が失敗しました。Visual Studio は、アセンブリを神秘的な完全信頼リストに追加することを提案していますが、VS2010 にはそれがありません。お知らせ下さい。