Razor ASP.NET Core'da sayfa yetkilendirme kuralları
Sayfalar uygulamanızda Razor erişimi denetlemenin bir yolu, başlangıçta yetkilendirme kurallarını kullanmaktır. Bu kurallar, kullanıcıları yetkilendirmenize ve anonim kullanıcıların tek tek sayfalara veya sayfa klasörlerine erişmesine izin vermenizi sağlar. Bu konuda açıklanan kurallar, erişimi denetlemek için otomatik olarak yetkilendirme filtreleri uygular.
Örnek kodu görüntüleme veya indirme (indirme)
Örnek uygulama, ASP.NET Core Identityolmadan kimlik doğrulamasını kullanırcookie. Bu konuda gösterilen kavramlar ve örnekler, ASP.NET Core Identitykullanan uygulamalara eşit olarak uygulanır. ASP.NET Core'u kullanmak için ASP.NET IdentityCore'da giriş Identity sayfasındaki yönergeleri izleyin.
Sayfaya erişmek için yetkilendirme gerektir
AuthorizePage Belirtilen yolda sayfaya bir AuthorizeFilter eklemek için kuralını kullanın:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Belirtilen yol, uzantı içermeyen ve yalnızca eğik çizgi içeren Sayfalar kök göreli yolu olan Görünüm Altyapısı yoludur Razor .
Yetkilendirme ilkesi belirtmek için AuthorizePage aşırı yüklemesini kullanın:
options.Conventions.AuthorizePage("/Contact", "AtLeast21");
Dekont
filtre AuthorizeFilter özniteliğine sahip bir sayfa modeli sınıfına [Authorize]
uygulanabilir. Daha fazla bilgi için bkz . Yetkilendirme filtresi özniteliği.
Bir sayfa klasörüne erişmek için yetkilendirme gerektir
Belirtilen yoldaki AuthorizeFolder bir AuthorizeFilter klasördeki tüm sayfalara bir eklemek için kuralını kullanın:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Belirtilen yol, Sayfalar kök göreli yolu olan Görünüm Altyapısı yoludur Razor .
Yetkilendirme ilkesi belirtmek için AuthorizeFolder aşırı yüklemesini kullanın:
options.Conventions.AuthorizeFolder("/Private", "AtLeast21");
Alan sayfasına erişmek için yetkilendirme gerektir
AuthorizeAreaPage Belirtilen yolda alan sayfasına bir AuthorizeFilter eklemek için kuralını kullanın:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
Sayfa adı, belirtilen alan için sayfaların kök dizinine göre uzantısı olmayan dosyanın yoludur. Örneğin, dosyanın Areas/Identity/Pages/Manage/Accounts.cshtml
sayfa adı /Manage/Accounts şeklindedir.
Yetkilendirme ilkesi belirtmek için AuthorizeAreaPage aşırı yüklemesini kullanın:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
Bir alan klasörüne erişmek için yetkilendirme gerektir
Belirtilen yoldaki AuthorizeAreaFolder bir AuthorizeFilter klasördeki tüm alanlara bir eklemek için kuralı kullanın:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
Klasör yolu, belirtilen alan için sayfaların kök dizinine göre klasörün yoludur. Örneğin, Alanlar//Sayfalar/Yönet/Identity altındaki dosyaların klasör yolu /Yönet'tir.
Yetkilendirme ilkesi belirtmek için AuthorizeAreaFolder aşırı yüklemesini kullanın:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
Sayfaya anonim erişim izni verme
AllowAnonymousToPage Belirtilen yolda bir sayfaya eklemek AllowAnonymousFilter için kuralını kullanın:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Belirtilen yol, uzantı içermeyen ve yalnızca eğik çizgi içeren Sayfalar kök göreli yolu olan Görünüm Altyapısı yoludur Razor .
Bir sayfa klasörüne anonim erişim izni verme
Belirtilen yoldaki AllowAnonymousToFolder bir AllowAnonymousFilter klasördeki tüm sayfalara bir eklemek için kuralını kullanın:
services.AddRazorPages(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
});
Belirtilen yol, Sayfalar kök göreli yolu olan Görünüm Altyapısı yoludur Razor .
Yetkili ve anonim erişimi birleştirmeye ilişkin not
Bir sayfa klasörünün yetkilendirme gerektirdiğini belirtmek ve ardından bu klasördeki bir sayfanın anonim erişime izin vereceğini belirtmek geçerli olur:
// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")
Ancak bunun tersi geçerli değildir. Anonim erişim için bir sayfa klasörü bildiremez ve sonra bu klasör içinde yetkilendirme gerektiren bir sayfa belirtemezsiniz:
// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")
Özel sayfasında yetkilendirme gerektirme başarısız oluyor. hem ve AuthorizeFilter hem de AllowAnonymousFilter sayfaya uygulandığında, AllowAnonymousFilter öncelik kazanır ve erişimi denetler.
Ek kaynaklar
Sayfalar uygulamanızda Razor erişimi denetlemenin bir yolu, başlangıçta yetkilendirme kurallarını kullanmaktır. Bu kurallar, kullanıcıları yetkilendirmenize ve anonim kullanıcıların tek tek sayfalara veya sayfa klasörlerine erişmesine izin vermenizi sağlar. Bu konuda açıklanan kurallar, erişimi denetlemek için otomatik olarak yetkilendirme filtreleri uygular.
Örnek kodu görüntüleme veya indirme (indirme)
Örnek uygulama, ASP.NET Core Identityolmadan kimlik doğrulamasını kullanırcookie. Bu konuda gösterilen kavramlar ve örnekler, ASP.NET Core Identitykullanan uygulamalara eşit olarak uygulanır. ASP.NET Core'u kullanmak için ASP.NET IdentityCore'da giriş Identity sayfasındaki yönergeleri izleyin.
Sayfaya erişmek için yetkilendirme gerektir
Belirtilen yoldaki AuthorizePage sayfaya bir AuthorizeFilter eklemek için aracılığıyla AddRazorPagesOptions kuralını kullanın:
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Belirtilen yol, uzantı içermeyen ve yalnızca eğik çizgi içeren Sayfalar kök göreli yolu olan Görünüm Altyapısı yoludur Razor .
Yetkilendirme ilkesi belirtmek için AuthorizePage aşırı yüklemesini kullanın:
options.Conventions.AuthorizePage("/Contact", "AtLeast21");
Dekont
filtre AuthorizeFilter özniteliğine sahip bir sayfa modeli sınıfına [Authorize]
uygulanabilir. Daha fazla bilgi için bkz . Yetkilendirme filtresi özniteliği.
Bir sayfa klasörüne erişmek için yetkilendirme gerektir
Belirtilen yoldaki AuthorizeFolder bir AuthorizeFilter klasördeki tüm sayfalara bir eklemek için aracılığıyla AddRazorPagesOptions kuralını kullanın:
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Belirtilen yol, Sayfalar kök göreli yolu olan Görünüm Altyapısı yoludur Razor .
Yetkilendirme ilkesi belirtmek için AuthorizeFolder aşırı yüklemesini kullanın:
options.Conventions.AuthorizeFolder("/Private", "AtLeast21");
Alan sayfasına erişmek için yetkilendirme gerektir
Belirtilen yoldaki AuthorizeAreaPage alan sayfasına bir AuthorizeFilter eklemek için aracılığıyla AddRazorPagesOptions kuralını kullanın:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts");
Sayfa adı, belirtilen alan için sayfaların kök dizinine göre uzantısı olmayan dosyanın yoludur. Örneğin, dosyanın Areas/Identity/Pages/Manage/Accounts.cshtml
sayfa adı /Manage/Accounts şeklindedir.
Yetkilendirme ilkesi belirtmek için AuthorizeAreaPage aşırı yüklemesini kullanın:
options.Conventions.AuthorizeAreaPage("Identity", "/Manage/Accounts", "AtLeast21");
Bir alan klasörüne erişmek için yetkilendirme gerektir
Belirtilen yoldaki AuthorizeAreaFolder bir AuthorizeFilter klasördeki tüm alanlara bir eklemek için aracılığıyla AddRazorPagesOptions kuralını kullanın:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage");
Klasör yolu, belirtilen alan için sayfaların kök dizinine göre klasörün yoludur. Örneğin, Alanlar//Sayfalar/Yönet/Identity altındaki dosyaların klasör yolu /Yönet'tir.
Yetkilendirme ilkesi belirtmek için AuthorizeAreaFolder aşırı yüklemesini kullanın:
options.Conventions.AuthorizeAreaFolder("Identity", "/Manage", "AtLeast21");
Sayfaya anonim erişim izni verme
AllowAnonymousToPage Belirtilen yolda bir sayfaya eklemek AllowAnonymousFilter için aracılığıyla AddRazorPagesOptions kuralını kullanın:
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Belirtilen yol, uzantı içermeyen ve yalnızca eğik çizgi içeren Sayfalar kök göreli yolu olan Görünüm Altyapısı yoludur Razor .
Bir sayfa klasörüne anonim erişim izni verme
Belirtilen yoldaki AllowAnonymousToFolder bir AllowAnonymousFilter klasördeki tüm sayfalara bir eklemek için aracılığıyla AddRazorPagesOptions kuralını kullanın:
services.AddMvc()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Contact");
options.Conventions.AuthorizeFolder("/Private");
options.Conventions.AllowAnonymousToPage("/Private/PublicPage");
options.Conventions.AllowAnonymousToFolder("/Private/PublicPages");
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Belirtilen yol, Sayfalar kök göreli yolu olan Görünüm Altyapısı yoludur Razor .
Yetkili ve anonim erişimi birleştirmeye ilişkin not
Yetkilendirme gerektiren bir sayfa klasörünün belirtilmesi ve bu klasörün içindeki bir sayfanın anonim erişime izin verileceğini belirtmek geçerli olur:
// This works.
.AuthorizeFolder("/Private").AllowAnonymousToPage("/Private/Public")
Ancak bunun tersi geçerli değildir. Anonim erişim için bir sayfa klasörü bildiremez ve sonra bu klasör içinde yetkilendirme gerektiren bir sayfa belirtemezsiniz:
// This doesn't work!
.AllowAnonymousToFolder("/Public").AuthorizePage("/Public/Private")
Özel sayfasında yetkilendirme gerektirme başarısız oluyor. hem ve AuthorizeFilter hem de AllowAnonymousFilter sayfaya uygulandığında, AllowAnonymousFilter öncelik kazanır ve erişimi denetler.
Ek kaynaklar
ASP.NET Core