5

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:

  1. 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.
  2. 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.
  3. Thực sự có một lớp học SPPictureLibrary khiến tôi cho rằng có thể kế thừa lớp SPDocumentLibrary để cung cấp hành vi tùy chỉnh trên thư viện Tài liệu.
  4. WebPartAdder.SiteWebPartGalleryProvider theo cách nào đó đang kết nối SPDocumentLibrary với phương thức WebPart bên trong Microsoft.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ể:

  1. CheckPermissions
  2. GetUserEffectivePermissionInfo
  3. GetUserEffectivePermissions
  4. 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:

  1. 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).
  2. 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ồn SPDocumentLibrary 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).
  3. 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.
  4. 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.

+0

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 –

Trả lời

2

Tôi không nghĩ rằng bạn có cấp điều khiển đó trong SharePoint.

Không chắc bạn có xem xét tùy chọn Sự kiện SharePoint hay không. Thay vì tạo lớp của riêng bạn để thêm logic, bạn có thể thêm logic dưới dạng sự kiện SharePoint. Bạn có thể đăng ký các sự kiện liên quan và thêm logic cho phù hợp. Ví dụ: bạn có thể hủy cập nhật dựa trên logic tùy chỉnh của mình. Tuy nhiên, tôi không nghĩ rằng bạn có thể tùy chỉnh logic cấp quyền cơ sở.

SPList có phương thức 'CheckPermissions' mà lần lượt gọi 'CheckPermissions' của lớp cơ sở (SPSecurableObject). Tuy nhiên, tôi nghi ngờ nó sẽ có thể tạo lớp con của riêng bạn, ghi đè lên các phương pháp có liên quan và tiếp nhận logic cho phép. Đó là một cái gì đó rất cốt lõi để SharePoint mà tôi không nghĩ là có ý định được tùy chỉnh.

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