Laravel Nova ẩn tài nguyên từ thanh bên

Được công bố tại Laracon năm nay, Laravel Nova được tung ra một tháng sau đó. Được tạo bởi Taylor Otwell, cũng là người tạo ra Laravel, nó tích hợp trơn tru với Laravel framework, nó dễ dàng mở rộng và rất đẹp để làm việc với. Kiểm tra tài liệu đầy đủ ở đây

Mặc dù tài liệu rất hữu ích nhưng có những điều bạn phải tự mình khám phá. Một điều tôi gặp phải trong những ngày này là cách ẩn tài nguyên khỏi điều hướng chỉ dành cho một nhóm người dùng

Giả sử chúng ta có hai vai trò, Quản trị viên và Người quản lý và nhiều tài nguyên, như Tổ chức, Tòa nhà, v.v.

Vì nhiều lý do kinh doanh, chúng tôi cần xóa Tài nguyên tòa nhà khỏi điều hướng chỉ dành cho vai trò Người quản lý

Nếu đây là yêu cầu, đối với tất cả các vai trò, chúng tôi sẽ đặt thuộc tính displayInNavigation trong Tài nguyên tòa nhà thành false như được hiển thị bên dưới

public static $displayInNavigation = false;

Một giải pháp tao nhã mà tôi đã tìm thấy để xóa một tài nguyên khỏi điều hướng chỉ cho một nhóm người dùng, đó là ghi đè phương thức availableForNavigation từ lớp Tài nguyên, trong lớp Tài nguyên tòa nhà của chúng tôi

Khi Nova chỉ được truy cập bởi bạn hoặc nhóm phát triển của bạn, bạn có thể không cần ủy quyền bổ sung trước khi Nova xử lý các yêu cầu đến. Tuy nhiên, nếu bạn cung cấp quyền truy cập vào Nova cho khách hàng hoặc nhóm lớn các nhà phát triển của mình, bạn có thể cho phép một số yêu cầu nhất định. Ví dụ: có lẽ chỉ quản trị viên mới có thể xóa bản ghi. Rất may, Nova thực hiện một cách tiếp cận đơn giản để ủy quyền tận dụng nhiều tính năng của Laravel mà bạn đã quen thuộc

chính sách

Để giới hạn người dùng nào có thể xem, tạo, cập nhật hoặc xóa tài nguyên, Nova tận dụng Laravel's. Chính sách là các lớp PHP đơn giản tổ chức logic ủy quyền cho một mô hình hoặc tài nguyên cụ thể. Ví dụ: nếu ứng dụng của bạn là một blog, bạn có thể có một mô hình Post và một PostPolicy tương ứng trong ứng dụng của mình

Khi thao tác với tài nguyên trong Nova, Nova sẽ tự động tìm chính sách tương ứng cho mô hình. Thông thường, các chính sách này sẽ được đăng ký trong AuthServiceProvider ứng dụng của bạn. Nếu Nova phát hiện một chính sách đã được đăng ký cho mô hình, nó sẽ tự động kiểm tra các phương thức ủy quyền có liên quan của chính sách đó trước khi thực hiện các hành động tương ứng, chẳng hạn như

  • viewAny
  • view
  • create
  • update
  • ________số 8_______
  • restore
  • forceDelete

Không cần cấu hình bổ sung. Vì vậy, ví dụ, để xác định người dùng nào được phép cập nhật mô hình Post, bạn chỉ cần xác định một phương thức update trên lớp chính sách tương ứng của mô hình

Phương thức chính sách không xác định

Nếu một chính sách tồn tại nhưng thiếu một phương thức cho một hành động cụ thể, Nova sẽ sử dụng quyền mặc định sau cho từng hành động

Policy ActionDefault PermissionviewAnyAllowedviewDisallowedcreateDisallowedupdateDisalloweddeleteDisallowedforceDeleteDisallowedrestoreDisallowedPostPolicy9AllowedAuthServiceProvider0AllowedAuthServiceProvider1AllowedAuthServiceProvider2Allowed

Vì vậy, nếu bạn đã xác định chính sách, đừng quên xác định tất cả các phương thức ủy quyền có liên quan của chính sách đó

Ẩn toàn bộ tài nguyên

Nếu bạn muốn ẩn toàn bộ tài nguyên Nova khỏi một nhóm nhỏ người dùng trên bảng điều khiển của mình, bạn có thể xác định phương thức viewAny trên lớp chính sách của mô hình. Nếu không có phương pháp viewAny nào được xác định cho một chính sách nhất định, Nova sẽ cho rằng người dùng có thể xem tài nguyên

Các mối quan hệ

Chúng ta đã học cách ủy quyền cho các hành động xem, tạo, cập nhật và xóa thông thường, nhưng còn các tương tác trong mối quan hệ thì sao? . Một lần nữa, Nova làm cho điều này trở nên đơn giản bằng cách tận dụng các chính sách của Laravel

Khi làm việc với các mối quan hệ, Nova sử dụng quy ước đặt tên phương thức chính sách đơn giản. Để minh họa quy ước này, giả sử ứng dụng của bạn có tài nguyên AuthServiceProvider5 và tài nguyên AuthServiceProvider6. Nếu bạn muốn cho phép người dùng nào có thể thêm nhận xét vào podcast, bạn nên xác định phương thức AuthServiceProvider7 trên lớp chính sách của mô hình podcast của bạn

Như bạn có thể thấy, Nova sử dụng quy ước đặt tên phương thức chính sách PostPolicy9 đơn giản để ủy quyền cho các hành động trong mối quan hệ

Đối với mối quan hệ nhiều-nhiều, Nova sử dụng quy ước đặt tên tương tự. Tuy nhiên, thay vì PostPolicy9, bạn nên sử dụng quy ước đặt tên AuthServiceProvider0 / AuthServiceProvider2. Ví dụ: hãy tưởng tượng một mô hình AuthServiceProvider5 có mối quan hệ nhiều-nhiều với mô hình viewAny3. Nếu bạn muốn cho phép người dùng nào có thể đính kèm "thẻ" vào podcast, bạn có thể thêm phương thức viewAny4 vào chính sách podcast của mình. Ngoài ra, bạn có thể muốn xác định nghịch đảo viewAny5 trên chính sách thẻ

Trong các ví dụ trước, chúng tôi đang xác định xem người dùng có được phép đính kèm mô hình này vào mô hình khác hay không. Nếu một số loại người dùng nhất định không bao giờ được phép đính kèm một loại mô hình nhất định, bạn có thể xác định phương thức AuthServiceProvider1 trên lớp chính sách của mình. Điều này sẽ ngăn hoàn toàn nút "Đính kèm" hiển thị trong Giao diện người dùng Nova

Ủy quyền nhiều đến nhiều

Khi làm việc với các mối quan hệ nhiều-nhiều, hãy đảm bảo bạn xác định các phương thức chính sách ủy quyền phù hợp trên từng lớp chính sách của tài nguyên liên quan

Nếu một trong các mô hình tài nguyên Nova của bạn có chính sách tương ứng, nhưng bạn muốn tắt ủy quyền Nova cho tài nguyên đó, bạn có thể ghi đè phương thức viewAny7 trên tài nguyên Nova

Lĩnh vực

Đôi khi bạn có thể muốn ẩn một số trường khỏi một nhóm người dùng. Bạn có thể dễ dàng thực hiện điều này bằng cách xâu chuỗi phương thức viewAny8 vào định nghĩa trường của bạn. Phương thức viewAny8 chấp nhận một Closure sẽ trả về view0 hoặc view1. Việc đóng cửa sẽ nhận được yêu cầu HTTP đến

Trong ví dụ trên, chúng tôi đang sử dụng phương pháp view3 của đặc điểm view2 của Laravel trên mô hình view4 của chúng tôi để xác định xem người dùng được ủy quyền có được ủy quyền cho hành động view5 hay không. Tuy nhiên, vì việc ủy ​​quyền cho các phương pháp chính sách ủy quyền là trường hợp sử dụng phổ biến cho viewAny8, nên bạn có thể sử dụng phương pháp view7 để đạt được hành vi tương tự. Phương thức view7 có chữ ký phương thức giống như phương thức view3 của đặc điểm view9

Lọc chỉ mục

Bạn có thể nhận thấy rằng việc trả về view1 từ phương thức view của chính sách không ngăn một tài nguyên nhất định xuất hiện trong chỉ mục tài nguyên. Để lọc các mô hình khỏi truy vấn chỉ mục tài nguyên, bạn có thể ghi đè phương thức create3 trên tài nguyên của mình. Phương thức này đã được khai thác trong lớp cơ sở create4 của bạn, bạn có thể chỉ cần sao chép và dán nó vào một tài nguyên cụ thể rồi sửa đổi truy vấn

Lọc liên quan

Nếu bạn muốn lọc các truy vấn được sử dụng để điền vào các menu lựa chọn mô hình mối quan hệ, bạn có thể ghi đè phương thức create5 trên tài nguyên của mình

Ví dụ: nếu ứng dụng của bạn có tài nguyên AuthServiceProvider6 thuộc về tài nguyên AuthServiceProvider5, Nova sẽ cho phép bạn chọn cha mẹ AuthServiceProvider5 khi tạo một AuthServiceProvider6. Để giới hạn các podcast có sẵn trong menu lựa chọn đó, bạn nên ghi đè phương thức create5 trên tài nguyên AuthServiceProvider5 của mình

Dynamic Relatable Phương pháp

Bạn có thể tùy chỉnh truy vấn "có thể liên quan" cho các mối quan hệ riêng lẻ bằng cách sử dụng tên phương thức động. Ví dụ: nếu ứng dụng của bạn có tài nguyên Post, trong đó các bài đăng có thể được gắn thẻ, nhưng tài nguyên viewAny3 được liên kết với các loại mô hình khác nhau, bạn có thể xác định phương pháp update4 để tùy chỉnh truy vấn có thể liên quan cho mối quan hệ này

Nếu cần, bạn có thể truy cập update5 và update6 cho yêu cầu thông qua phiên bản update7 được truyền cho phương thức của bạn

Khi tài nguyên Nova phụ thuộc vào tài nguyên khác nhiều lần, bạn có thể cung cấp đối số thứ ba khi xác định mối quan hệ để chỉ định tài nguyên Nova nào mà mối quan hệ sẽ sử dụng

Khi tùy chỉnh truy vấn "có thể liên quan", bạn có thể kiểm tra loại trường để xác định cách tạo truy vấn mối quan hệ

Lọc trinh sát

Nếu ứng dụng của bạn đang tận dụng sức mạnh của Laravel Scout để tìm kiếm, bạn cũng có thể tùy chỉnh phiên bản truy vấn update8 trước khi nó được gửi đến nhà cung cấp dịch vụ tìm kiếm của bạn. Để thực hiện điều này, hãy ghi đè phương thức update9 trên tài nguyên của bạn

Làm cách nào để ẩn tài nguyên trong laravel nova?

Một cách khác để ẩn tài nguyên khỏi danh sách tài nguyên là thêm đoạn mã dưới đây vào tệp tài nguyên của bạn. public static $displayInNavigation = false; Ước gì chúng ta cũng có nó trong tài liệu. Lưu câu trả lời này.

Nova Laravel là gì?

Laravel Nova là bảng điều khiển quản trị tuyệt đẹp cho các ứng dụng Laravel . Tính năng chính của Nova là khả năng quản lý các bản ghi cơ sở dữ liệu cơ bản của bạn bằng Eloquent. Nova thực hiện điều này bằng cách cho phép bạn xác định một "tài nguyên" Nova tương ứng với từng mô hình Eloquent trong ứng dụng của bạn.

Chủ Đề