7

Tôi có bộ điều khiển được sử dụng cho từng loại ủy quyền. Ví dụ, một ủy quyền lớp A sẽ có một bộ các trình điều khiển mà mỗi bộ điều khiển yêu cầu ủy quyền lớp A. Có cách nào để đặt một thuộc tính [Authorize(Role="Class A")] ở đâu đó sẽ áp dụng cho từng bộ điều khiển đó mà không cần phải trang trí từng bộ điều khiển với cùng một thuộc tính?Làm thế nào để cho phép một bộ điều khiển mà không đặt chú thích trên mỗi bộ điều khiển?

Trả lời

9

Bạn có thể khởi tạo những bộ điều khiển có nguồn gốc từ bộ điều khiển cơ sở của bạn. cụ thể là đặt thuộc tính của bạn trên một lớp cơ sở điều khiển và để đảm bảo rằng mỗi bộ điều khiển bên trong có nguồn gốc từ lớp cơ sở.

[Authorize(Role="Class A")] 
public class CustomBaseController : Controller{} 

public class AController: CustomBaseController{} 

public class BController: CustomBaseController{} 
+0

Plus, tùy thuộc vào số lượng bộ điều khiển bạn có, bạn có thể dễ dàng đặt thuộc tính pesky [Authorize] ở trên cùng. Với việc có một bộ điều khiển cơ sở có vẻ như bạn sẽ phải gây rối với mỗi bộ điều khiển anyways. – FrankO

+2

Có, nhưng sử dụng bộ điều khiển cơ sở là cách thực hành tốt nhất để bắt đầu và kiểm tra một số dữ liệu cho tất cả bộ điều khiển. Có thể bạn muốn sử dụng thuộc tính Authorize tùy chỉnh. Cũng có những thay đổi trên thuộc tính Custom Authorize trên một bộ điều khiển đơn giản. – gandil

2

Đặt thuộc tính trên một lớp cơ sở và kế thừa, tạo ra hệ thống phân cấp thích hợp nhất với kịch bản của bạn ...

3

Bạn có thể kế thừa từ một bộ điều khiển cơ bản, chẳng hạn như

[Authorize(Role = "Class A")] 
public class ClassARequiredController : Controller {} 

Nếu không, bạn sẽ nhìn vào một bộ lọc toàn cầu, và bởi câu hỏi của bạn, tôi giả sử bạn có nhiều vai trò và bộ nên tôi không nghĩ rằng các bộ lọc toàn cầu là dành cho bạn.

4

Có có một cách, làm cho tất cả những A-class điều khiển xuất phát từ điều khiển một cơ sở và địa điểm trên đó các AuthorizeAttribute:

[Authorize(Role="Class A")] 
public class AController : Controller 
{ 
    ... 
} 

public class AFirstController : AController // Gets it's parent attribute 
{ 
    ... 
} 

public class ASecondController : AController // Gets it's parent attribute 
{ 
    ... 
} 
+0

Nếu bạn có thời gian, bạn có thể xem http://stackoverflow.com/questions/32741403/inheritance-of-authorized-roles-in-controller-classes này không. –

4

2 hoặc 3 phản ứng ở đây giải thích cách bạn có thể làm điều đó ... nhưng bạn cũng có thể sử dụng Fluent Security để xử lý tất cả các bộ điều khiển + Hoạt động thiết lập trong một tập tin. Một số lợi ích (từ trang web của họ):

Mã dựa cấu hình

Không thuộc tính hoặc xml cluttering lên mã của bạn.

dấu ấn Low

thạo an ninh sẽ không lây lan như cháy rừng trong ứng dụng của bạn. Cấu hình của bạn có thể được lưu giữ trong một tệp duy nhất.

+1

URL hiện được đặt mặc định thành trang đỗ xe miền. Fluent Security có còn là một thứ không? – Caimen

Các vấn đề liên quan