Như đã đề cập trong mục 2.4.3.3, Authorization module chỉ có 2 lớp public là: ClaimPermissionAttribute và ClaimPermission. Vì thế, ứng dụng chỉ tương tác với module này thông qua 2 lớp này.
2.4.5.1 ClaimPermissionAttribute
Lớp này được sử dụng khi muốn điều khiển truy cập theo kiểu declarative. Nói cách khác nó là một thuộc tính của phương thức.Thuộc tính này chỉ định rằng phương thức cần được kiểm tra quyền truy cập trước khi thực thi.Có hai giá trị cần chỉ định khi khai báo, đó là Resource và Operation tương ứng với tài nguyên, và phép toán thao tác trên tài nguyên.
[ClaimPermission(Resource="User", Operation= "List")]
publicList<ListUserViewModel>ListUser() {
}
Chú ý:trong C# khi ta viết [ClaimPermission(Resource="User", Operation= "List")]thì nó chính là cách viết ngắn gọn của
[ClaimPermissionAttribute(Resource="User", Operation= "List")]mà thôi.
Để dành quyền điều khiển (kiểm tra quyền truy xuất) trước khi thực thi
phương thức.Lớp ClaimPermissionAttribute được xây dựng bằng cách kế
thừa từ lớp CodeAccessSecurityAttribute và ghi đè phương thức
CreatePermission để trả về một đối tượng ClaimPermission.
2.4.5.2 ClaimPermission
ClaimPermission triển khai giao diện IPermission
vàIUnrestrictedPermission.Điểm mấu chốt trong ClaimPermission là phương
thức Demand.Phương thức này được thực thi trước mỗi phương thức được
gắn thuộc tính ClaimPermissionAttribute để kiểm tra quyền truy xuất.Nếu
không được phép truy xuất thì phương thức Demand sẽ ném ra một
SecurityException.
Ngoài ra lớp ClaimPermission còn cung cấp 2 phương thức tĩnh:
publicstaticboolCheckAccess(string resource, string operation) {...}
39
Hai phương thức này được sử dụng trong theo cách thức imperative. Sự khác
nhau giữa hai phương thức này là CheckAccess trả về giá trị false khi người
dùng không có quyền truy xuất, trong khi Demand sẽ ném ra một
SecurityException.
2.4.5.3 Logic điều khiển truy cập
Để thấy được logic điều khiển truy cập và sự tương tác giữa
ClaimPermissionAttribute và ClaimPermission. Ta xét biểu đồ trình tự:
Hình 2.6: Logic điều khiển truy cập
- Khi ta gắn một ClaimPermissionAttributevới một phương thức sẽ khiến
.Net Framework gọi phương thức CreatePermission để lấy về một
40
- Trước khi thực thi phương thức, .Net Framework gọi phương thức
Demand để kiểm tra quyền truy cập, nếu người dùng hiện tại không có
41
Chương 3. ỨNG DỤNG
Để minh hoạ việc ứng dụng ExtensibilityRBAC framework trong thực tế.Chúng tôi thử nghiệm với ứng dụng chia sẻ tệp số liệu trong ngân hàng.