Mô-đun lượt xem: Cách giới hạn quyền truy cập của người dùng


8

Tôi đang sử dụng mô-đun Lượt xem để tạo chế độ xem chỉ những người dùng cụ thể mới có thể truy cập. Tôi biết rằng Chế độ xem bao gồm kiểm soát truy cập theo vai trò hoặc quyền, nhưng tôi cần một cái gì đó chi tiết hơn: Về cơ bản, tôi muốn chỉ có thể nói người dùng "x" và người dùng "y" có thể truy cập vào một chế độ xem cụ thể (hoặc người nào khác có một vai trò quản trị trang web). Vì vậy, điều này sẽ hoạt động rất giống với cách mô-đun ACL hoạt động cho các nút riêng lẻ.

Là cách tiếp cận tốt nhất để tạo một plugin truy cập lượt xem tùy chỉnh? Tôi không có nhiều kinh nghiệm với điều này.

Ngoài ra, tôi tự hỏi về việc sử dụng một đối số với một số xác nhận để thực hiện điều này (để tôi không phải tạo ra hàng tá chế độ xem riêng biệt). Chẳng hạn, vì chế độ xem này sẽ là một tab trên đường dẫn nút cụ thể, tôi tự hỏi về việc thiết lập trường tham chiếu người dùng trên nút đó chỉ định ai có thể xem chế độ xem. Tôi chỉ cần một cách để chế độ xem chỉ xác thực nếu người dùng hiện tại bằng với người dùng được chỉ định trong trường tham chiếu người dùng.

Có ý kiến ​​gì không? Hay tôi đang làm điều này phức tạp hơn mức cần thiết?

Cảm ơn, Ben


Bạn có thể phải viết một plugin truy cập lượt xem nhưng nếu bạn có thể cập nhật câu hỏi của mình với một chút chi tiết hơn thì có lẽ bạn có thể đạt được nó theo cách khác. Cái nhìn làm gì / hiển thị? Những người dùng nào được phép xem nó? Người dùng có vai trò khác nhau? Người dùng có một lĩnh vực cụ thể hoặc một cái gì đó liên quan đến họ cho phép họ truy cập nó không?
Jamie Hollern

Jamie, cảm ơn đã trả lời. Trên thực tế, tôi cũng đang sử dụng Drupal Commerce để tạo ra một loại cửa hàng trực tuyến độc đáo. Là một tab trên mỗi nút sản phẩm (ngoài tab Xem và Chỉnh sửa), tôi muốn tạo một tab bổ sung có tên "Đơn hàng" sẽ là chế độ xem hiển thị tất cả các đơn đặt hàng đã bao gồm sản phẩm cụ thể đó. Nhà cung cấp sản phẩm cụ thể là người dùng mà tôi muốn có thể xem giao diện "Đơn hàng" cho sản phẩm đó.
BenK

Bằng cách này, nhà cung cấp có thể theo dõi doanh số bán sản phẩm của họ trên cơ sở liên tục. Nhưng tôi không muốn cấp quyền truy cập cho mọi người với vai trò "nhà cung cấp" bởi vì sau đó bất kỳ nhà cung cấp nào cũng có thể xem doanh số bán sản phẩm của các nhà cung cấp khác. Có lý? ;-) --Ben
BenK

Câu trả lời:


5

Thay vì giới hạn quyền trên Chế độ xem, bạn có thể giới hạn quyền trên mục menu dẫn đến chế độ xem đó (có thể là tab trên nút hoặc gọi lại menu). Bạn có thể tạo chế độ xem của mình chỉ bằng màn hình "Mặc định" và không hiển thị Trang (vì vậy người dùng không thể tìm ra đường dẫn đến màn hình đó). Sau đó, trong page callbackmục menu của bạn chỉ cần gọi views_embed_viewđể hiển thị chế độ xem. Có vẻ như việc xử lý các quyền trên một mục menu có thể dễ dàng hơn so với việc viết một trình cắm mới cho Chế độ xem (mặc dù một trình cắm có thể hữu ích cho người khác).


Cám ơn vì sự gợi ý! Tôi đã kết thúc theo cách tiếp cận chung này (cũng được Berdir đề xuất), nhưng đã tạo ra một trường tham chiếu người dùng trên mỗi nút có tên là field_usercanaccess. Tôi đã có thể sử dụng hook_menu () và xác định một cuộc gọi lại truy cập để đảm bảo người dùng hiện tại khớp với người dùng được tham chiếu trong trường. Nếu không, tab (và chế độ xem) sẽ không được hiển thị. Điều này đang làm việc tuyệt vời! :-)
BenK

@BenK tuyệt vời! Tôi rất vui vì bạn có một cái gì đó làm việc. Là một phần của việc giúp làm cho Câu trả lời của Drupal trở thành một tài nguyên tuyệt vời, bạn cũng nên bỏ phiếu cho câu trả lời (hoặc câu hỏi) mà bạn thấy hữu ích. Vì vậy, có lẽ bạn nên bỏ phiếu cho câu trả lời của @ Berdir (và của tôi, nhưng đây không phải là tôi đang cố gắng để có được phiếu bầu, nó đang cố gắng biến Drupal trả lời thành một trang web tốt hơn)
Chaulky

Cảm ơn. :-) Tôi mới tham gia Stack Exchange và tôi chỉ có 13 điểm. Khi tôi cố gắng bỏ phiếu, nó nói tôi cần 15 điểm để bỏ phiếu. Vì vậy, nếu ai đó có hai điểm rảnh rỗi (hoặc tôi có thể kiếm cho họ một số cách khác) tôi chắc chắn sẽ bỏ phiếu cho câu trả lời và câu hỏi. --Ben
BenK

@BenK oh đúng rồi, tôi quên mất giới hạn 15 điểm. Bạn luôn có thể thử trả lời một câu hỏi ... một câu trả lời cho câu trả lời của bạn được 10 điểm.
Chaulky

6

Hãy thử mô-đun Xem lại cuộc gọi lại .

Cung cấp kiểm soát truy cập dựa trên cuộc gọi lại cho Chế độ xem.

Các hàm gọi lại có sẵn được xác định bởi các mô-đun bằng cách sử dụng hook_views_access_callbacks()chức năng (theo cách tương tự như trong hook_perm()), sau đó có thể được đặt trong cấu hình "Hạn chế truy cập" của chế độ xem.


Sử dụng lượt xem truy cập gọi lại hoạt động tuyệt vời ngoại trừ một lỗi nghiêm trọng kỳ lạ. Xem tại đây: drupal.stackexchange.com/questions/3336/ . Có vẻ như cách để đi - nhưng làm thế nào để khắc phục nó?
Druvision

2

Tôi phải thiếu một cái gì đó, nhưng có vẻ như bạn sẽ tạo ra một vai trò mới và thêm những Người dùng này. Sau đó, sử dụng tính năng Truy cập: Vai trò.

Nếu bạn cần buộc quyền Truy cập vào nội dung nào đó, tôi sẽ sử dụng quyền truy cập Lượt xem tùy chỉnh, lần đầu tiên tôi thấy đau khi thiết lập, nhưng đánh giá cao tính linh hoạt khi hoạt động. Nếu Chế độ xem đang tạo Mục menu, nó sẽ không xuất hiện nếu Chế độ xem không vượt qua chức năng truy cập.

Nếu bạn chỉ ẩn một mục menu, đối với tôi, chế độ xem vẫn sẽ chạy và Người dùng có thể điều chỉnh URI để xem dữ liệu.

Jerry


1

Còn về việc sử dụng mô-đun Quyền tùy chỉnh để tạo một số quyền mới cụ thể cho mục đích của bạn, sau đó sử dụng mô-đun Quyền người dùng để gán các quyền mới đó cho từng người dùng thì sao?

Các mô-đun quyền tùy chỉnh là rất nhẹ. Mặc dù vậy, tôi không chắc chắn về mô-đun quyền của Người dùng, vì về cơ bản, nó tạo ra một vai trò mới cho mỗi người dùng đằng sau hậu trường (những vai trò này không hiển thị trên trang quyền chính). Nếu bạn có nhiều người dùng, điều này có thể tăng kích thước vai trò của bạn và bảng user_roles một chút.


Đó là một gợi ý thú vị để sử dụng Quyền tùy chỉnh. Tôi đã không thấy mô-đun đó vì nó trở nên rộng hơn chỉ là Quyền cấu hình trang web. Điều phức tạp duy nhất ở đây là tôi đang làm tất cả những điều này trong Drupal 7 (và vẫn chưa có chi nhánh chính thức). Nhưng nếu tôi có thể làm việc đó, có thể chỉ định quyền trong điều khiển truy cập của chế độ xem trực tiếp (mà không cần mô-đun Quyền của Người dùng). Cám ơn vì sự gợi ý! :-)
BenK

Tôi sẽ thử nó và báo cáo lại.
BenK

0

Phải, điều đó có ý nghĩa hơn. Tôi nghĩ bạn có thể (có thể, không chắc chắn 100%) sử dụng Chế độ xem và đối số. Đặt đối số thành id người dùng được lấy từ người dùng hiện đang đăng nhập và làm cho đối số mặc định không hiển thị. Điều đó sẽ có thể làm điều đó, mặc dù tôi không biết làm thế nào an toàn để công bằng. Nếu bạn thử, hãy đăng lại và cho tôi biết tiến trình của bạn.


Vâng, tôi sẽ thử mọi thứ và báo cáo lại. Tôi cũng đang thử một plugin truy cập lượt xem với một đối số, vì vậy chúng tôi sẽ xem cách nó hoạt động. Cảm ơn.
BenK

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.