2009-11-09 8 views
8

Tôi đang làm việc trên một ứng dụng trong CodeIgniter và tôi muốn có các trang quản trị cho một số đối tượng trong ứng dụng, và tôi tự hỏi điều gì sẽ là cách tốt hơn để đưa chúng vào cấu trúc MVC.Cách tốt nhất để tạo trang Quản trị trong CodeIgniter?

Ý tưởng 1: Trong mỗi bộ điều khiển, có chức năng quản trị và thêm tất cả các trang quản trị mà tôi muốn vào chức năng đó. dụ URL: domain.com/articles/admin

Idea 2 Thực hiện một bộ điều khiển quản trị mới, trong đó sẽ phải tham khảo nhiều mô hình khác nhau, và đặt tất cả các trang quản trị trong đó. URL mẫu: domain.com/admin/articles

Cách nào sẽ tốt hơn?

Chỉnh sửa để làm rõ: Bằng chức năng quản trị, tôi có nghĩa là có thể thực hiện các thao tác CRUD cơ bản trên bất kỳ đối tượng nào và có thể hiển thị danh sách tất cả đối tượng đã nói.

Trả lời

2

Tôi sẽ nhắc lại Justin trong việc giữ cho nó là một phần của bộ điều khiển riêng lẻ.

Bạn nên thiết lập một số loại hệ thống ủy quyền mà các bộ điều khiển riêng lẻ có thể sử dụng để người đăng nhập (tên người dùng) và quyền truy cập nào (admin/member/etc). Here's a SO thread on CodeIgniter Auth Classes.

Chế độ xem sau đó sẽ hiển thị điều kiện các liên kết thích hợp và bộ điều khiển sẽ thực thi chính sách bằng cách kiểm tra xác thực trước khi chuyển bất kỳ dữ liệu nào đến mô hình hoặc hiển thị chế độ xem chỉnh sửa. Về truy cập trái phép, một lỗi có thể được hiển thị hoặc chỉ hiển thị với chế độ xem không chỉnh sửa.

Cách tiếp cận này dường như có ý nghĩa nhất (ít nhất là với tôi) vì tất cả các chức năng được lưu trữ trong bộ điều khiển riêng lẻ. Giữ chức năng quản trị trong một bộ điều khiển quản trị duy nhất có nghĩa là bạn sẽ phải quản lý hai bộ điều khiển (quản trị viên và bộ điều khiển thực tế) mỗi lần bạn thêm mới (hoặc loại bỏ thứ gì đó).

Nếu bạn lo lắng về việc kiểm tra auth trong mọi bộ điều khiển, bạn có thể tạo một lớp điều khiển chung với tất cả các thiết lập auth, sau đó có bộ điều khiển của bạn mở rộng nó. Cuối cùng kiểm tra điều khiển auth cá nhân có thể đơn giản như:

function edit() 
{ 
    if(!$this->auth()){ 
     //display auth error, or forward to view page 
    } 
} 

Tất nhiên một số loại thực ACL sẽ làm tốt hơn điều này, nhưng tôi không tin CodeIgniter có một 'chính thức' ACL.

+0

Trong số ít các downvotes - bất cứ ai quan tâm để giải thích tại sao? –

1

Tùy thuộc vào ý của bạn bằng chức năng 'Quản trị' ... thông thường, điều này được coi là chế độ xem 'Chỉnh sửa'.

Và thông thường, bạn sử dụng bộ điều khiển hiện tại để phân phối chế độ xem 'Chỉnh sửa' cho phép người dùng được ủy quyền thực hiện chỉnh sửa (trong trường hợp của bạn, chỉ dành cho người dùng Quản trị viên).

0

Trông giống như một lựa chọn cá nhân, tôi thích có mọi thứ tập trung để bộ điều khiển quản trị sẽ là đặt cược của tôi.

Bằng cách đó tôi sẽ không phải mở 5 bộ điều khiển khác nhau trong khi sửa đổi các tác vụ quản trị.

+1

này không mở rộng tốt. vấn đề ở đây là bạn đang kết hợp nhiều mã không liên quan. Mỗi khi động cơ PHP chạy trên bộ điều khiển, nó phải biên dịch mọi thứ trong phần phụ trợ của bạn và không chỉ là những thứ có liên quan đến hành động. –

+0

Tôi có thể tranh luận ngược lại. Các khu vực quản trị không phải là lưu lượng truy cập, trang người dùng và nếu bạn đang kết hợp với một khu vực quản trị cho mọi phần, công cụ phải chạy trên mọi mã quản trị hoàn toàn không liên quan đến người dùng, do đó lãng phí. Tuy nhiên, điều này không thực sự quan trọng với việc sử dụng bộ đệm mã. – pablasso

2

Bạn nên có thư mục quản trị trong thư mục bộ điều khiển trong đó bạn có thể truy cập vào quản trị của mình, ví dụ: yoursite.com/admin/users.

Tất cả các nhu cầu quản lý của bạn sẽ ở đó và tất cả các phương pháp này sẽ được bảo vệ bằng cách kiểm tra quyền sử dụng như sau:

if (! $this->auth->logged_in(array('login', 'admin'))) 
{ 
    $this->session->set_flashdata('message', 'You do not have access to view this page'); 

    redirect('admin/users/login'); 
} 

Sau đó, tất cả các bộ điều khiển bên ngoài thư mục 'admin' sẽ - tùy thuộc vào loại trang web của - sẽ chỉ để xem, v.v. không có phần quản trị.

+0

Bạn làm điều này trong mọi phương pháp? Bạn nên làm điều này trong hàm tạo của bộ điều khiển, hoặc của một bộ điều khiển cơ sở để lưu sự lặp lại. http://philsturgeon.co.uk/news/2010/02/CodeIgniter-Base-Classes-Keeping-it-DRY –

+0

tất nhiên bạn có thể làm điều đó trong bộ điều khiển cơ sở. –

6

Chắc chắn là một bộ điều khiển khác ít nhất!

Tôi từng nghĩ rằng tôi có thể giữ tất cả các chức năng quản trị trong một bộ điều khiển, nhưng khi các chương trình của tôi tăng lên, tôi nhận ra rằng tôi cần nhiều bộ điều khiển trong phần quản trị của mình.

Vì vậy, tôi đã tạo một thư mục bên trong thư mục bộ điều khiển với tên "quản trị" và đặt tất cả bộ điều khiển quản trị của tôi vào đó. Vì vậy, các thư mục của tôi sẽ giống như thế:

  • ứng dụng
    • điều khiển
      • front.php
      • welcome.php
      • quản trị
        • dashboard.php
        • useradmin.php
  • vv ...

Một vấn đề này tạo ra, tuy nhiên, là khi bạn gõ http://mysite.com/admin trong trình duyệt của bạn, nó trả về một trang 404. Vì vậy, hãy chuyển đến tệp "application/config/routes.php" của bạn và thêm một tuyến đường tùy chỉnh:

$routes['admin'] = 'admin/dashboard/index'; 
2

Ý tưởng 2 là tốt hơn. hệ thống/ứng dụng/bộ điều khiển/quản trị

Bạn giữ tất cả bộ điều khiển quản trị của mình tại đây.