Permisos de usuario
Subscríbete para tener acceso a esta y todas las lecciones PRO de Aprendible y a los repositorios privados
Ó si ya tienes una cuenta

Desarrollo de un blog con manejo de roles y permisos

Permisos de usuario

En esta lección agregamos los permisos para ver, crear, actualizar y eliminar todos las publicaciones, de esta manera tenemos más flexibilidad al momento de asignar permisos a usuarios.

Regresar
Elvin Mejía
Elvin Mejía
Eso era, muchas gracias
Elvin Mejía
Elvin Mejía
Hola Estimado que tal, hice un crud del modelo Category. estaba haciendo una prueba con respecto a los authorize y no me sale, 

1. En los Seeder agregué esto.
        $viewCategoriesPermission = Permission::create(['name' => 'View categories']);
        $createCategoriesPermission = Permission::create(['name' => 'Create categories']);
        $updateCategoriesPermission = Permission::create(['name' => 'Update categories']);
        $deleteCategoriesPermission = Permission::create(['name' => 'Delete categories']);
2. Esto es mi CategoryPolicy.php

<?php

namespace App\Policies;

use App\User;
use App\Category;
use Illuminate\Auth\Access\HandlesAuthorization;

class CategoryPolicy
{
    use HandlesAuthorization;

    /**
     * Determine whether the user can view the category.
     *
     * @param  \App\User  $user
     * @param  \App\Category  $category
     * @return mixed
     */
    public function view(User $user, Category $category)
    {
        return $user->hasPermissionTo('View categories');
    }

    /**
     * Determine whether the user can create categories.
     *
     * @param  \App\User  $user
     * @return mixed
     */
    public function create(User $user)
    {
        $user->hasPermissionTo('Create categories');
    }

    /**
     * Determine whether the user can update the category.
     *
     * @param  \App\User  $user
     * @param  \App\Category  $category
     * @return mixed
     */
    public function update(User $user, Category $category)
    {

        return $user->hasPermissionTo('Update categories');

    }

    /**
     * Determine whether the user can delete the category.
     *
     * @param  \App\User  $user
     * @param  \App\Category  $category
     * @return mixed
     */
    public function delete(User $user, Category $category)
    {
        return $user->hasPermissionTo('Delete categories');
    }

    /**
     * Determine whether the user can restore the category.
     *
     * @param  \App\User  $user
     * @param  \App\Category  $category
     * @return mixed
     */
    public function restore(User $user, Category $category)
    {
        //
    }

    /**
     * Determine whether the user can permanently delete the category.
     *
     * @param  \App\User  $user
     * @param  \App\Category  $category
     * @return mixed
     */
    public function forceDelete(User $user, Category $category)
    {
        //
    }
}



3. Esto es el CategoryController.php

    public function index()
    {
        $categories = Category::orderBy('id', 'desc')->paginate();
        return view('admin.categories.index', compact('categories'));
    }        

    public function create()
    {
             $this->authorize('create', new Category);

             return view('admin.categories.create');

        }

        public function store(StoreRequest $request, Category $category)
    {
        //dd($request);
        $category = $category->store($request);
        return back()->with('flash', 'La categoría ha sido creado satisfactoriamente');
    }


    public function show(Category $category)
    {   

        $this->authorize('view');

        return view('admin.categories.show', [

            'category' => $category

        ]);
    }

    public function edit(Category $category)
    {   

        $this->authorize('update', $category);

        return view('admin.categories.edit', [

            'category' => $category,

        ]);
    }


    public function update(UpdateRequest $request, Category $category)
    {

        $this->authorize('update', $category);
        //dd($request);
        $category->my_update($request);
        return redirect()
            ->route('categories.edit', $category)
            ->with('flash','La categoría ha sido actualizado satisfactoriamente');
    }


    public function destroy(Request $request)
    {
        $category = Category::findOrFail($request->code_id);
        $this->authorize('delete');
        $category->delete();

        return back()->with('flash','La categoría ha sido eliminado');
    }

4. Aquí hice un tinker.

 
C:\xampp\htdocs\proyecto\blog (master -> origin)
λ php artisan tinker
Psy Shell v0.9.9 (PHP 7.3.2 — cli) by Justin Hileman
>>> $writer = App\User::find(2)
=> App\User {#2987
     id: 2,
     name: "Anderson Paucar",
     email: "anderson@gmail.com",
     email_verified_at: null,
     created_at: "2019-05-12 18:06:32",
     updated_at: "2019-05-12 18:06:32",
   }
>>> $writer->givePermissionTo('Update categories')
=> App\User {#2987
     id: 2,
     name: "Anderson Paucar",
     email: "anderson@gmail.com",
     email_verified_at: null,
     created_at: "2019-05-12 18:06:32",
     updated_at: "2019-05-12 18:06:32",
     permissions: Illuminate\Database\Eloquent\Collection {#3023
       all: [
         Spatie\Permission\Models\Permission {#3022
           id: 7,
           name: "Update categories",
           guard_name: "web",
           created_at: "2019-05-12 18:06:31",
           updated_at: "2019-05-12 18:06:31",
           pivot: Illuminate\Database\Eloquent\Relations\MorphPivot {#3024
             model_id: 2,
             permission_id: 7,
             model_type: "App\User",
           },
         },
       ],
     },
   }
>>>


5. Di un permiso para que pueda actualizar la categoría, y al hacer click en editar me sale esto.

Error 403, Página no autorizada, "Es la vista que se hizo en el view/errors/403.blade.php"

Observación: Solo puedo ver la lista del index, más no  tengo autorización para show, update, create, delete,


 

PODRÍAS AYUDARME EN ESTO PORFAVOR?

MUCHAS GRACIAS




Jorge García
Jorge García
Hola Elvin, registraste las políticas en el AuthServiceProviders?
Dileydi
Dileydi
Hola Jorge, gracias por esta serie de tutoriales sobre el package Laravel-Permission.
Una pregunta por favor, como pudiera configurar los permisos para que ciertos usuarios solo tengan acceso a un tipo de contenido en particular en el backoffice? Por ejemplo, si quisiera que un usuario tuviera solamente accesso a la gestion de categorias? 
Gracias de antemano por tu tiempo y tu ayuda.
Jorge García
Jorge García
Hola Dileydi, en ese caso, bastaría con darle el permiso para ver categorías, editar categorías, etc...
O también se podría crear un role que contenga todos estos permisos para asignarlos más fácilmente al usuario. 
Una vez que tenemos estos permisos de categorías, solo queda restringir el acceso ya sea con políticas de acceso o con middlewares.