lý do để nâng cao rơi vào hai loại:
- Mã của bạn cần thực hiện các hoạt động trong SharePoint mà người dùng hiện nay không có quyền. Điều này phải luôn được thực hiện khi làm việc với Bảo mật SharePoint, không phải là biện pháp "chỉ trong trường hợp" cho biết bạn cần hiểu rõ tình trạng bảo mật của mình tốt hơn.
- Mã của bạn cần truy cập các tài nguyên bên ngoài (hệ thống tệp máy chủ, cơ sở dữ liệu, chia sẻ tệp, v.v ...) mà bản sắc của hồ bơi ứng dụng có quyền truy cập nhưng người dùng hiện tại thì không.
Trước đây, bạn nên sử dụng SPSite impersonation tốt hơn. Lý do thứ hai là lý do duy nhất tôi sử dụng RWEP.
Để làm rõ, RWEP không sinh ra một chuỗi mới. Thay vào đó, nó sử dụng API Win32 để hoàn nguyên danh tính của chuỗi hiện tại trở lại danh tính quy trình (tắt mạo danh) để chạy mã nâng cao, sau đó chuyển tiếp mạo danh để tiếp tục hoạt động thay mặt cho người dùng hiện tại. Này có một số ý nghĩa:
- RWEP không có gì nếu thread không được mạo nhận, vì vậy nó là vô ích trong công việc hẹn giờ, công việc Visual Studio, giao diện điều khiển ứng dụng, và mã chạy qua stsadm (thu tính năng).
- Truy cập vào SharePoint, giả sử bạn tạo SPSite mới trong CodeToRunElevated, sẽ được thực hiện với quyền của nhóm ứng dụng (SHAREPOINT \ system). Tài khoản này sẽ có toàn quyền truy cập vào ứng dụng web hiện tại, nhưng không được có quyền cấp độ trang trại để thực hiện những việc như sửa đổi thuộc tính SPFarm hoặc thực hiện thay đổi đối với SSP.
- Sử dụng các đối tượng nhận dạng nhận dạng (như SPSite và các con của nó) trên các ranh giới thực thi của CodeToRunElevated của bạn có khả năng gây ra một số hành vi và điều kiện cuộc đua thực sự sôi nổi. Đối với tất cả các ý định và mục đích, hãy xem xét điều này không được hỗ trợ.
Và như Alex đã nói, trẻ em của SPSite kế thừa quyền của chúng từ SPSite, lần lượt có quyền được đặt khi được tạo. Vì vậy, SPContext.Current.Site vẫn sẽ hành xử với các điều khoản của người dùng hiện tại ngay cả khi bạn tham chiếu nó trong CodeToRunElevated của bạn. Thay vào đó, bạn sẽ cần phải tạo và tiêu thụ một SPSite mới trong khối được nâng lên.
Để tóm tắt: RWEP để mạo danh App Pool bên ngoài SharePoint, mạo danh SPSite để mạo danh App Pool bên trong SharePoint.
Thông tin tuyệt vời, cảm ơn Dahlbyk! –
câu trả lời hay. bạn có thể giải thích lý do tại sao nó vô ích trong công việc hẹn giờ vv? –
Ứng dụng web SharePoint sử dụng mạo danh để chạy mã khi người dùng đã đăng nhập - RWEP chỉ tạm thời tắt tính năng mạo danh đó trên một chuỗi. Nếu mã không chạy với mạo danh để bắt đầu, như trong một công việc hẹn giờ hoặc ứng dụng giao diện điều khiển, thì người dùng luồng và người dùng quy trình ("người dùng nâng cao" của RWEP) giống nhau. – dahlbyk