フォーム認証を使用してMVCアプリケーションを作成しています。 Active Directoryに対して認証しているので、カスタムRoleProviderを作成しました。私のアプリケーションは、これまでweb.configのappSettingsセクションで定義してきたロールの小さなセットのみに関係しています。
_<appSettings>
<add key="DirectorRole" value="Domain\Directors" />
<add key="ManagementRole" value="Domain\Managers" />
...
</appSettings>
_
しかし、私はこのアプローチでいくつかの問題に遭遇しました:
[Authorize(Roles = ConfigurationManager.AppSettings["DirectorRole"])]
コンパイルされないため、グループの名前を再度指定する必要があります:[Authorize(Roles = "Domain\\Directors")]
。Web.configでロールを定義するためのより良い/再利用可能な方法が必要なようですが、誰かが私を正しい方向に向けることができますか?
カスタムのauthorize属性を使用したいと思います。このように。
public class MyAuthorizeAttribute : AuthorizeAttribute {
public MyAuthorizeAttribute(params string[] roleKeys) {
List<string> roles = new List<string>(roleKeys.Length);
//foreach(var roleKey in roleKeys) {
//roles.Add(ConfigurationManager.AppSettings["DirectorRole"]);
//}
var allRoles = (NameValueCollection)ConfigurationManager.GetSection("roles");
foreach(var roleKey in roleKeys) {
roles.Add(allRoles[roleKey]);
}
this.Roles = string.Join(",", roles);
}
}
コントローラで、次を使用します。
[MyAuthorize("DirectorRole")]
Web.configで
<configSections>
<section
name="roles"
type="System.Configuration.NameValueFileSectionHandler,System, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<roles>
<add key="DirectorRole" value="Domain\Directors" />
<add key="ManagementRole" value="Domain\Managers" />
</roles>
これで最初の問題がうまく解決することを願っています。そして少しひねると2番目も解決します。
著者があなたが直面している問題について話しているこの優れた例を見てください。
http://www.ryanmwright.com/2010/04/25/dynamic-controlleraction-authorization-in-asp-net-mvc/