ビューでカスタム AuthorizeAttribute クラスを使用してリンクを表示および非表示にする方法を理解しようと、しばらくの間掘り下げてきました。IsInRole からカスタム AuthorizeAttribute に移行するのは、特定のタスクの実行を許可するグループをエンド ユーザーが選択できるようにするためです。この時点まで、私は使用してきました:
@{ if (HttpContext.Current.User.IsInRole("UserMgr"))
{ Html.ActionLink("Edit", "Edit", new { id = item.pkRecID }); }
}
UserMgr はドメイン グループです。(これは機能しますが、私がする必要があることではありません)
次に、カスタム AuthorizeAttribute クラスを作成しました。
public class isAuthorized : AuthorizeAttribute
{
public string Access { get; set; }
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var authorized = base.AuthorizeCore(httpContext);
string[] aszList = Access.Split(',');
if (!authorized)
{
// The user is not authenticated
return false;
}
var user = httpContext.User;
if (user.IsInRole("Admin"))
return true;
var rd = httpContext.Request.RequestContext.RouteData;
var id = rd.Values["id"] as string;
if (string.IsNullOrEmpty(id))
{
// Now id was specified => we do not allow access
return false;
}
foreach (string szGroup in aszList) // check to see if user is in group
{
if (user.IsInRole(szGroup))
{
return true;
}
}
return false;
}
これはコントローラーで関数へのアクセスをブロックするために機能しますが、この関数を使用してビューでリンクを非表示にするにはどうすればよいですか?
ありがとう!