私のウェブサイトでユーザー権限(編集、読み取り、新規)を処理したいのですが、MyRoles
ユーザー権限コードを持つ追加のパラメーターバイトを渡すことを考えています:0-読み取り専用、1-フルコントロール、2-編集および読み取り
では、どのようにかみそりのメソッドをオーバーライドHtml.ActionLink
してそれを処理することができますか?私のメソッドはこの問題(ユーザー権限)を処理するための最良の方法ですか?
私のウェブサイトでユーザー権限(編集、読み取り、新規)を処理したいのですが、MyRoles
ユーザー権限コードを持つ追加のパラメーターバイトを渡すことを考えています:0-読み取り専用、1-フルコントロール、2-編集および読み取り
では、どのようにかみそりのメソッドをオーバーライドHtml.ActionLink
してそれを処理することができますか?私のメソッドはこの問題(ユーザー権限)を処理するための最良の方法ですか?
私の方法は、この問題を処理するための最良の方法ですか (ユーザー権限)?
いいえ、ロールをパラメーターとしてアクションに渡すと、ユーザーが好きなロールを渡すことができるため、セキュリティ上の欠陥が発生します。
これを行う正しい方法は、ロール プロバイダーを使用することです。ロールをユーザーに関連付けてから、特定のアクションにアクセスするためにユーザーが必要とするロールを定義します。
例えば:
[Authorize(Roles = "Readers")]
public ActionResult SomeAction()
{
// only users belonging to the readers role will be able to access this action
}
サーバー側を適切に保護したら、Razor ビューでアンカーなどを条件付きで表示/非表示にすることができます。
@if (User.IsInRole("Readers"))
{
@Html.ActionLink("read the news", "SomeAction")
}
そして、これらの if を書かないようにするために、カスタム HTML ヘルパーを書くことができます:
@Html.RoleActionLink("read the news", "Some Action", "Readers")
既定のメンバーシップ プロバイダーとロール プロバイダーは既定の aspnetdb を使用しますが、もちろん、独自のデータを照会するためにカスタム プロバイダーを拡張または作成することもできます。