Tôi đang cố gắng triển khai phương pháp tiếp cận quyền truy cập dựa trên quyền mới cho ứng dụng MVC của mình; Chúng tôi có một số Nhóm quyền và mỗi nhóm có một danh sách Giấy phép. ví dụ chúng tôi có nhóm giấy phép Invoices
có chứa các phím cho phép CreateInvoice,RemoveInvoice,etc
.Thuộc tính C#: Sử dụng hằng số enum làm tham số đầu vào
Trong phương pháp này, mỗi mvc Action
phải yêu cầu giấy phép cụ thể để thực thi. Tôi đang cố gắng để làm điều này thông qua CustomAttributes, một cái gì đó như thế này:
public class InvoiceController : Controller
{
[RequirePermission(Permissions.Invoices.CreateInvoice)]
public ActionResult Create()
{
return View();
}
}
Để làm cho nó dễ dàng hơn cho các nhà phát triển để nhớ Cho phép nhóm khác nhau và Keys Permission Tôi đang cố gắng để tạo ra một danh sách được xác định trước các điều khoản mà nên là sự kết hợp giữa nhóm quyền và khóa cấp phép. nhưng do các hạn chế được áp dụng cho việc sử dụng các đối số thuộc tính trong C# Tôi chưa thể thực hiện nó. (Tôi không muốn thực hiện thêm một enumurator lớn và đặt tất cả các phím phép trong đó)
thử cuối cùng của tôi đã tạo ra một Enumerator cho mỗi nhóm cho phép và sau đó xác định các phím phép như hằng enum trong đó:
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
}
}
Như bạn có thể thấy chúng tôi kết hợp mã ở đây, khóa nhóm quyền được chỉ định sử dụng mã thuộc tính PermissionGroup
và mã khóa cho phép được chỉ định dưới dạng mã số trên mỗi hằng số enum.
các RequirePermission thuộc tính được định nghĩa như sau:
public class RequirePermissionAttribute : Attribute
{
private Enum _Permission;
public RequirePermissionAttribute(Enum Permission)
: base()
{
_Permission = Permission;
}
}
nhưng vấn đề là đối tượng thuộc loại Enum
không thể được sử dụng như Arguments Thuộc tính.
Bất kỳ đề xuất/ý tưởng nào được đánh giá cao
vâng, tôi đã làm điều đó nhưng vấn đề của tôi không tạo ra một thuộc tính (ActionFilter thuộc tính) để kiểm tra Quyền Người dùng. Tôi chỉ cần một cách tốt hơn (hơn bằng cách sử dụng các phím chuỗi đồng bằng) để tạo các hằng số quyền được xác định trước. – sos00
http: //www.vivienchevallier.com/Articles/create-a-custom-authorizeattribute-that-accept-parameters-of-type-enum Hãy thử điều này. – AdrianCogiel