認証されたユーザーがサイトの有効なメンバーシップを持っているかどうかを確認する必要があります。たとえば、ユーザーのメンバーシップがアクティブな場合、ユーザーはサイトの「メンバー専用」エリアを自由に閲覧できますが、メンバーシップが非アクティブまたは有効期限切れの場合、Web サイトの請求エリアに自動的にリダイレクトされます。特定の制限されたページのみを表示できます。
ユーザーのメンバーシップの有効期限を FormsAuthentication Cookie に保存することで、これにアプローチすることを考えています。私はカスタム MembershipProvider を使用しており、既にユーザーの ID を Cookie に保存しているため、これは簡単に行うことができます。認証 Cookie は 24 時間で期限切れになるように設定されています。AuthorizeAttribute
次に、次のように custom を使用してメンバーシップがアクティブかどうかを確認します。
public class MembershipAuthorizeAttribute : AuthorizeAttribute
{
private readonly bool authorizeMembership;
public MembershipAuthorizeAttribute()
{
this.authorizeMembership = true;
}
public MembershipAuthorizeAttribute(bool authorizeMembership)
{
this.authorizeMembership = authorizeMembership;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (this.authorizeMembership)
{
// Code to validate the membership hasn't expired
}
return base.AuthorizeCore(httpContext);
}
}
次に、コントローラーを次のように装飾できます。
[MembershipAuthorize]
public class ActiveMembersController : Controller
{
// Only users with an active membership can access this controller
}
[MembershipAuthorize(false)]
public class BillingController : Controller
{
// All members can access this controller
}
これは良いアプローチですか、それともユーザーのメンバーシップがアクティブかどうかを検証するためのよりクリーンでより好ましい方法はありますか? ユーザーのメンバーシップの有効期限日またはステータスを取得するためだけに、すべてのリクエストでデータベースにアクセスする必要はありません。そのため、この値を Cookie に保存したいと考えています。また、この値を FormsAuthentication Cookie に保存しても問題ありませんか、それとも別の Cookie に保存する必要がありますか?