Aracılığıyla paylaş


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