2013-06-09 19 views
24

Tôi đang cố gắng sử dụng bộ đệm 2 trong trang web của tôi đang được xây dựng với Laravel 4. Về cơ bản tôi không hiểu cách thực hiện quyền.Làm thế nào để: thực hiện sentry 2 quyền với Laravel 4?

Các ví dụ tôi đã nhìn thấy cho quyền cho một nhóm cụ thể sau đây là một ví dụ:

{ 
    "name" : "Administrator", 
    "permissions" : 
    { 
     "user.create" : 1, 
     "user.delete" : 1, 
     "user.view" : 1, 
     "user.update" : 1 
    } 
} 

SO này là thiết lập quyền cho nhóm admin. NHƯNG những quyền này được đặt ở đâu?

Trong bảng 'nhóm' có một trường được gọi là quyền là trường văn bản - chúng có được đặt ở đó không - nếu có thì sao? Hoặc là những thiết lập trong một mô hình hoặc bộ điều khiển?

Có ai có thể chỉ cho tôi từng bước về cách sử dụng trong ứng dụng Laravel 4 không? Tôi đã đọc các tài liệu hỗ trợ mà kẻ thù thông qua các chức năng nhưng tôi chỉ không chắc chắn làm thế nào để thiết lập dữ liệu để có được các chức năng để làm việc.

Trả lời

52

Về cơ bản bạn phải ..

Tạo nhóm của bạn

Sentry::getGroupProvider()->create([ 
    'name' => 'Super Administrators', 
    'permissions' => [ 
     'system' => 1, 
    ], 
]); 

Sentry::getGroupProvider()->create([ 
    'name' => 'Managers', 
    'permissions' => [ 
     'system.products' => 1, 
     'system.store' => 1, 
     'system.profile' => 1, 
    ], 
]); 

Thiết lập một nhóm để một người dùng cụ thể, trong trường hợp này nó được thiết lập quản lý để người dùng đăng nhập hiện tại

Sentry::getUser()->addGroup(Sentry::getGroupProvider()->findByName('Managers')); 

Kiểm tra xem người dùng có quyền truy cập cụ thể không

if (Sentry::getUser()->hasAnyAccess(['system','system.products'])) 
{ 
    // Will be able to do a thing 
} 

Kiểm tra nếu người dùng là Super Administrator (chỉ nhóm này có 'hệ thống' truy cập)

if (Sentry::getUser()->hasAnyAccess(['system'])) 
{ 
    // Will be able to do a thing 
} 

Nhận tất cả các nhóm từ một người dùng cụ

try 
{ 
    // Find the user using the user id 
    $user = Sentry::getUserProvider()->findById(1); 

    // Get the user groups 
    $groups = $user->getGroups(); 
} 
catch (Cartalyst\Sentry\Users\UserNotFoundException $e) 
{ 
    echo 'User was not found.'; 
} 
+0

Cảm ơn bạn đã cung cấp thông tin này - Tôi sẽ dùng thử và triển khai. Chỉ cần cho rõ ràng - là những cái tên bạn sử dụng liên quan đến các lớp học hoặc chỉ đơn giản là mô tả duy nhất cho một ứng dụng và có thể là bất cứ điều gì? – Ray

+2

Bạn đang nói về 'system',' system.products' ...? Không có mối quan hệ nào giữa họ và lớp học của bạn, đó chỉ là những cái tên bạn chọn. Tôi đang cố gắng để được chi tiết bằng cách sử dụng chúng như 'system.products.insert', nếu bạn có' system.products', bạn có thể làm tất cả mọi thứ trên sản phẩm. –

+1

Tôi đang tìm kiếm tất cả các ngày này –

4

Trong bảng groups bạn đặt quyền bằng JSON.

tôi có các cột sau:

id | name | permissions

Và một vòng:

1 | admin | {"admin":1, "create_news": 1}

Gán một người sử dụng cho một nhóm sử dụng bảng users_groups

Bây giờ bạn có thể sử dụng ví dụ sau để kiểm tra xem người dùng có quyền nhất định không:

$user = Sentry::getUser(); 
if ($user->hasAccess('create_news')) { 
    echo "You can create a news item"; 
} 
else { 
    echo "You can't create a news item"; 
} 
+0

Cảm ơn bạn cho điều này - tôi sẽ sử dụng kết hợp hai câu trả lời, cả hai đều có ý nghĩa. Bây giờ để dùng thử nó trong trang web của tôi. – Ray

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