parametreleri olarak enum sabitlerini kullanarak; Birkaç İzin Grubumuz var ve her grup İzin Izin bir listesini içerir. örneğin, CreateInvoice,RemoveInvoice,etc
izin anahtarlarını içeren Invoices
izin grubuna sahibiz.C# Özellikleri: girdi benim MVC uygulama için yeni izin tabanlı erişim yaklaşımını uygulamak çalışıyorum
Bu yaklaşımda, her mvc Action
, yürütme için belirli bir izin gerektirir. Ben, CustomAttributes aracılığıyla böyle bir şey yapmak çalışıyorum:
public class InvoiceController : Controller
{
[RequirePermission(Permissions.Invoices.CreateInvoice)]
public ActionResult Create()
{
return View();
}
}
daha kolay geliştiriciler Ben izinlerin önceden tanımlı bir liste oluşturmak çalışıyorum farklı Join Groups ve İzin Keys hatırlamak için yapmak o should izin grubu ve izin anahtarı bir arada olun. Ancak, C# numaralı öznitelikler argümanlarını kullanmaya yönelik uygulanan kısıtlamalar nedeniyle henüz çalışamamıştım.
benim son deneyin her izin grubu için bir sýralayýcý yaratan ve sonra orada enum sabitleri olarak izin anahtarlarına define (Ben ekstra büyük enumurator yapmak ve orada tüm izin anahtarlarını koymak istemiyorum):
public class PermissionEnums
{
[PermissionGroup(PermissionGroupCode.Invoice)]
public enum Invoices
{
CreateInvoice = 1,
UpdateInvoice = 2,
RemoveInvoice = 3,
ManageAttachments = 4
}
[PermissionGroup(PermissionGroupCode.UserAccounts)]
public enum UserAccounts
{
Create = 1,
ChangePassword = 2
}
}
Gördüğünüz gibi burada bir kod kombinasyonumuz var, her bir enum sabiti üzerinde sayısal kod olarak belirtilen PermissionGroup
özniteliği ve izin anahtarı kodu kullanılarak belirtilen izin grubu anahtarı. aşağıdaki gibi tanımlanmıştır
RequirePermission özelliği:
public class RequirePermissionAttribute : Attribute
{
private Enum _Permission;
public RequirePermissionAttribute(Enum Permission)
: base()
{
_Permission = Permission;
}
}
ancak sorun türünü Enum
nesneleri Özellik Argümanlar olarak kullanılamamıştır olmasıdır./Üzgün:
Herhangi bir öneri/fikir,
evet, bunu yaptık ama benim problem kontrol etmek için bir Özellik (ActionFilter özelliğini) oluşturarak değil Kullanıcı İzinleri. Önceden tanımlanmış izin sabitleri oluşturmak için daha iyi bir yönteme ihtiyacım var. – sos00
http: //www.vivienchevallier.com/Articles/create-a-custom-authorizeattribute-that-accepts-parameters-of-type-enum Bunu deneyin. – AdrianCogiel