ASP.net MVC 4 アプリケーションを構築しています。
過去に、[Authorize] 属性を使用して、役割に従ってユーザーを承認しました。
ただし、ソース コードを変更するのではなく、データベースを変更することでロールの承認を変更できる、より柔軟なソリューションが必要になりました。
誰でもこれを行う適切な方法を推奨できますか?
OnAuthorize メソッドのオーバーライドを検討しましたが、出力キャッシュの問題により、これはお勧めできません。
ASP.net MVC 4 アプリケーションを構築しています。
過去に、[Authorize] 属性を使用して、役割に従ってユーザーを承認しました。
ただし、ソース コードを変更するのではなく、データベースを変更することでロールの承認を変更できる、より柔軟なソリューションが必要になりました。
誰でもこれを行う適切な方法を推奨できますか?
OnAuthorize メソッドのオーバーライドを検討しましたが、出力キャッシュの問題により、これはお勧めできません。
あなたはこのようなことをすることができます、私たちは私たちのアプリケーションでこれを使用しています
[AttributeUsageAttribute
(AttributeTargets.Class | AttributeTargets.Struct |
AttributeTargets.Constructor | AttributeTargets.Method, Inherited = false)]
public class RequirePermissionsAttribute : ActionFilterAttribute, IAuthorizationFilter
{
// Use inbuilt methods
//OnAuthorization //HandleUnauthorizedRequest //OnCacheAuthorization }
[RequirePermissions(PermissionItems.ViewThisPage)]
public ActionResult Index()
{
}
あなたの要件を正しく理解できたかどうかはわかりませんが、次のようなデータ モデルを使用して、2 つのレベルの役割を持つことができます。
User -in-> Role -has-> Permission
ユーザーとロールの間、およびロールとパーミッションの間に mn の関係があります。
これを行うと、パーミッションは非常にきめ細かく安定したものになり、ロールは粗く、パーミッションのセットに柔軟にマッピングできます。
これを実装する 1 つの方法は、Users-Roles-Permissions を結合して権限をアプリケーション ロールとして返すカスタムRoleProviderを単純に記述することです。
これを行う場合、標準Authorize
属性を使用して、大まかなロール名ではなく、きめの細かいパーミッション名の 1 つを指定できます。たとえば、次のようになります。
[Authorize(Permissions.ViewCustomers)]