539
Chương 13: Bảo mật
Sử dụng lớp
System.Security.Permissions.PrincipalPermission
và bản sao đặc
tính
System.Security.Permissions.PrincipalPermissionAttribute
của lớp này để
bảo vệ các phần tử trong chương trình của bạn với các yêu cầu RBS.
.NET Framework hỗ trợ cả yêu cầu RBS bắt buộc (imperative RBS demand) và yêu cầu RBS
khai báo (declarative RBS demand). Lớp
PrincipalPermission
hỗ trợ các lệnh bảo mật bắt
buộc, và bản sao đặc tính
PrincipalPermissionAttribute
của lớp này hỗ trợ các lệnh bảo mật
khai báo. Các yêu cầu RBS sử dụng cú pháp giống như các yêu cầu CAS, nhưng các yêu cầu
RBS chỉ rõ tên mà người dùng hiện hành phải có, hoặc thông thường hơn là các vai trò mà
người dùng này là thành viên. Một yêu cầu RBS lệnh cho bộ thực thi xét tên và các vai trò của
người dùng hiện hành, và nếu chúng không đạt yêu cầu, bộ thực thi sẽ ném ngoại lệ
System.Security.SecurityException
.
Đoạn mã dưới đây trình bày cú pháp của một yêu cầu bảo mật bắt buộc:
// Cú pháp của một yêu cầu bảo mật bắt buộc dựa-trên-vai-trò.
public static void SomeMethod() {
§
PrincipalPermission perm =
new PrincipalPermission("UserName", "RoleName");
perm.Demand();
§
}
Trước tiên, bạn phải tạo một đối tượng
PrincipalPermission
chỉ định tên người dùng và tên
vai trò mà bạn yêu cầu, rồi gọi phương thức
Demand
của nó. Bạn chỉ có thể chỉ định một tên
người dùng và tên vai trò cho mỗi yêu cầu. Nếu tên người dùng hoặc tên vai trò là
null
, bất
kỳ giá trị nào cũng sẽ thỏa mãn yêu cầu. Khác với các quyền truy xuất mã lệnh, một yêu cầu
RBS không cho kết quả trong một stack walk; bộ thực thi chỉ đánh giá tên người dùng và các
vai trò của người dùng hiện hành.
Đoạn mã dưới đây trình bày cú pháp của một yêu cầu bảo mật khai báo:
// Cú pháp của một yêu cầu bảo mật khai báo dựa-trên-vai-trò.
[PrincipalPermission(SecurityAction.Demand, Name = "UserName",
Role = "RoleName")]
public static void SomeMethod() { /*...*/}
Bạn có thể thay các yêu cầu RBS khai báo ở mức lớp hay mức thành viên. Các yêu cầu mức-
lớp áp dụng cho tất cả các thành viên của lớp trừ khi có một yêu cầu mức-thành-viên chép đè
yêu cầu mức-lớp.
Nói chung, bạn có thể tự chọn hiện thực các yêu cầu RBS bắt buộc hay khai báo. Tuy nhiên,
các yêu cầu bảo mật bắt buộc cho phép bạn tích hợp các yêu cầu RBS với logic của mã lệnh để
thực hiện những yêu cầu RBS phức tạp. Ngoài ra, nếu không biết vai trò hay tên người dùng
để yêu cầu lúc biên dịch, bạn phải sử dụng các yêu cầu bắt buộc. Các yêu cầu RBS khai báo có
thuận lợi là chúng độc lập với logic của mã lệnh và dễ nhận biết hơn. Ngoài ra, bạn có thể