2015-11-06 3 views
4

Мне нужно авторизовать пользователей на форуме. Так в лезвии у меня есть @can('editPost', $post), прежде чем показывать форму для ответа на тему. Мой класс PostPolicy имеет метод editPost, который проверяет подлинность, если это пользовательский пост.Политика авторизации без модели

Однако проблема возникает, когда я хочу сделать простую проверку, например deletePost(). Это проверяет, является ли Auth::user()->isAdmin

public function deletePost(User $user) { 
    return Auth::user()->isAdmin; 
    // return $user->isAdmin 
} 

Однако это даже не дозвонились, так как я не передавая экземпляр Post

Моя реальное применение мир гораздо сложнее, но я используя isAdmin в качестве простого примера.

Я думаю, определение $gate->define('deletePost', 'App\Policies\[email protected]'); в AuthServiceProvider может работать, но будет в конечном итоге отделяя мои определения и методы, и в конечном счете для большого приложения загромождать AuthServiceProvider

+0

Просто для кого-то ищет ответ, вот хороший способ зарегистрировать глобальную политику без использования модели bi nding. http://laravel-tricks.com/tricks/using-51-authorization-without-models –

ответ

3

При регистрации политики это имя_класс, который используется для маршрутизации проверяет класс, поэтому для того, чтобы перенаправляться в политику, вы можете просто передать имя класса того типа, с которым вы его зарегистрировали.

Попробуйте использовать @can ('удалить', Post :: класс) и посмотреть, если это получает вас там

см Осветите \ Auth \ Access \ Gate :: firstArgumentCorrespondsToPolicy

EDIT После немного больше Diggin я нашел это https://github.com/laravel/framework/commit/70f75255808ffc96275e6f2f356616dd2e163434#diff-961368895033e553787b301c3be0e17a

так это выглядит, как если бы вы на версии 5.1.23, то вы сможете передать строку в противном случае ваш нужно будет просто передать новое сообщение

0

В контроллерах

$this->authorize('<ability>', <Class-With-Rule::class> | <Full-Path-To-Class>); 

По мнению лезвию

@can('<ability>', <Class-With-Rule>::class> | <Full-Path-To-Class>) 

В модели красноречивый

$user->can('<ability>', <Class-With-Rule>::class> | <Full-Path-To-Class>); 
Смежные вопросы