Đượ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 PermissionviewAny
Allowedview
Disallowedcreate
Disallowedupdate
Disalloweddelete
DisallowedforceDelete
Disallowedrestore
DisallowedPostPolicy
9AllowedAuthServiceProvider
0AllowedAuthServiceProvider
1AllowedAuthServiceProvider
2AllowedVì 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 AuthServiceProvider
5 và tài nguyên AuthServiceProvider
6. 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 AuthServiceProvider
7 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 PostPolicy
9 đơ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ì PostPolicy
9, bạn nên sử dụng quy ước đặt tên AuthServiceProvider
0 / AuthServiceProvider
2. Ví dụ: hãy tưởng tượng một mô hình AuthServiceProvider
5 có mối quan hệ nhiều-nhiều với mô hình viewAny
3. 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 viewAny
4 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 viewAny
5 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 AuthServiceProvider
1 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 viewAny
7 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 viewAny
8 vào định nghĩa trường của bạn. Phương thức viewAny
8 chấp nhận một Closure sẽ trả về view
0 hoặc view
1. 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 view
3 của đặc điểm view
2 của Laravel trên mô hình view
4 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 view
5 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 viewAny
8, nên bạn có thể sử dụng phương pháp view
7 để đạt được hành vi tương tự. Phương thức view
7 có chữ ký phương thức giống như phương thức view
3 của đặc điểm view
9
Lọc chỉ mục
Bạn có thể nhận thấy rằng việc trả về view
1 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 create
3 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ở create
4 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 create
5 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 AuthServiceProvider
6 thuộc về tài nguyên AuthServiceProvider
5, Nova sẽ cho phép bạn chọn cha mẹ AuthServiceProvider
5 khi tạo một AuthServiceProvider
6. Để 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 create
5 trên tài nguyên AuthServiceProvider
5 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 viewAny
3 đượ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 update
4 để 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 update
5 và update
6 cho yêu cầu thông qua phiên bản update
7 đượ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 update
8 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 update
9 trên tài nguyên của bạn