例として求人サイトを挙げる。求人サイトには求職者=Candidateと雇用者=Employerの2種類のユーザーロールが存在するものとする。そして、両者に共通の複数のページ(例:ホームページ、会社情報ページなど)があるものとし、それらのMasterPageをそれぞれのロールに準拠したものに変更したい場合の処理を下記に実装する。
-RoleBaseMasterPageAttribute.cs-
public class RoleBaseMasterPageAttribute : ActionFilterAttribute { public RoleBaseMasterPageAttribute() : base() { EmployerMasterPage = "~/Views/Shared/Employer.Master"; CandidateMasterPage = "~/Views/Shared/Candidate.Master"; AnonymousMasterPage = "~/Views/Shared/Site.Master"; } public string EmployerMasterPage { get; set; } public string CandidateMasterPage { get; set; } public string AnonymousMasterPage { get; set; } public override void OnResultExecuting(ResultExecutingContext filterContext) { ViewResult viewResult = filterContext.Result as ViewResult; if (viewResult == null) return; if (!filterContext.HttpContext.Request.IsAuthenticated) { viewResult.MasterName = AnonymousMasterPage; } else if (filterContext.HttpContext.User.IsInRole("Candidate")) { viewResult.MasterName = CandidateMasterPage; } else { viewResult.MasterName = EmployerMasterPage; } } }
これをActionまたはController全体に付与すれば、ログインしているユーザーのロールに準拠したマスターページを表示することができる。
0 件のコメント:
コメントを投稿