Xin lưu ý rằng tôi đang nói về việc chèn mã của tôi vào phía máy chủ SharePoint (thông qua gói/bổ trợ vv) thay vì sử dụng Microsoft.SharePoint.dll
hoặc dịch vụ web để truy cập SharePoint.Hooking vào SharePoint phía máy chủ
Vì vậy, vấn đề của tôi là điều này, tôi cần phải tùy chỉnh cách Thư viện tài liệu hoạt động, bao gồm quản lý quyền tùy chỉnh. Tôi đã duyệt qua số Microsoft.SharePoint.dll
phân tích nội bộ hoạt động của nó. Dưới đây là các quan sát của tôi:
SPDocumentLibrary
cung cấp logic cốt lõi để quản lý thư viện tài liệu. Tuy nhiên, bản thân nó không phải là một bản thân sốWebPart
.- Việc hiển thị phần web thực tế cho Thư viện tài liệu có thể được xử lý bởi
ListViewWebPart
hoặc lớp dẫn xuất. - Thực sự có một lớp học
SPPictureLibrary
khiến tôi cho rằng có thể kế thừa lớpSPDocumentLibrary
để cung cấp hành vi tùy chỉnh trên thư viện Tài liệu. WebPartAdder.SiteWebPartGalleryProvider
theo cách nào đó đang kết nốiSPDocumentLibrary
với phương thứcWebPart
bên trongMicrosoft.SharePoint.WebPartPages.WebPartAdder.AddSources
.
Bây giờ tất cả điều này là phía máy khách, không điều nào xảy ra trên chính máy chủ SharePoint (afaik). Tuy nhiên tôi thấy phương pháp overridable trên SPSecurableObject
rằng SPDocumentLibrary
/SPList
ghi đè, cụ thể:
CheckPermissions
GetUserEffectivePermissionInfo
GetUserEffectivePermissions
EffectiveBasePermissions
vv
Những gì tôi thực sự muốn làm là có thể ghi đè CheckPermissions
/EffectiveBasePermissions
trên máy chủ SharePoint SPDocumentLibrary
để chèn logic tùy chỉnh của tôi.
Bây giờ tôi sẽ chuyển hướng nghiên cứu của mình sang dll phía máy chủ SharePoint và hiểu chúng. Nhưng tôi rất thích nhận được một số ý kiến chuyên gia về việc liệu điều này là khả thi ở tất cả/chỉ đúng hướng. Dấu hiệu của Microsoft (đặc biệt là xem xét ASP.NET 2.0/ASP.NET MVC như một chuẩn mực) là khuôn khổ mở rộng/nhà cung cấp. Họ cung cấp các nhà cung cấp tuyệt vời cho "những thứ" ra khỏi hộp nhưng bạn có thể tạo các lớp học của bạn bằng cách kế thừa/thực hiện một cái gì đó để thay thế các nhà cung cấp mặc định. Vì vậy:
- Tôi có thể tiêm vào phía máy chủ SharePoint hay không. Giải pháp lý tưởng của tôi là tạo một lớp dẫn xuất
SPDocumentLibrary
(phía máy chủ) và tiêm nó vào bất cứ khi nào thư viện tài liệu được khởi tạo, đối tượng lớp của tôi được tạo (thay vìSPDocumentLibrary
, giả sử đó là lớp máy chủ lớp. vẫn cần phải "phản ánh" các lớp phía máy chủ SharePoint). - Nếu 1) là một sợi dây, tôi có thể tạo
WebPart
tùy chỉnh để sử dụng Thư viện tài liệu SharePoint theo cách mà Thư viện tài liệu gốc cảm thấy, nhưng vẫn cho phép tôi sử dụng lớp bắt nguồnSPDocumentLibrary
khi phần web đó được truy cập (xin lưu ý một lần nữa, tất cả các cuộc thảo luận của tôi là xung quanh phía máy chủ SharePoint, tức là mã của tôi thực hiện bên trong không gian địa chỉ của SharePoint/quy trình w3wp). - Tại sao chúng ta có logic trong
SPSite.EffectiveBasePermissions
.Tôi có nghĩa là nó được coi là CSOM, và nó chỉ đơn giản là chịu trách nhiệm cho serialization/deserialization của những gì được trả lại bởi/gửi đến máy chủ. Tuy nhiên, tôi thấy logic phức tạp trong thuộc tính bị ghi đè này xoay quanh sự cho phép suy luận. - Nếu cả 1) và 2) là một no-op (nghĩa đen :)), tôi có tùy chọn thao tác các quyền SharePoint hiệu quả trong khi hoạt động trong không gian địa chỉ của SharePoint trước khi SharePoint thực hiện bất kỳ hành động nào dựa trên các quyền đó.
Tôi biết đó là một câu hỏi dài, nhưng hy vọng tôi đang nghiên cứu tốt.
Bạn đã cân nhắc triển khai nhà cung cấp vai trò tùy chỉnh chưa? Có thể bạn có thể áp dụng một số xác nhận quyền sở hữu tùy chỉnh cho thư viện tài liệu của mình và sau đó chèn các xác nhận quyền sở hữu tùy chỉnh này vào danh tính đang chạy. http://geekswithblogs.net/GinoAbraham/archive/2017/03/21/custom-role-claim-based-authentication-on-sharepoint-2013.aspx –