JosephSilber / bouncer

Laravel Eloquent roles and abilities.
MIT License
3.43k stars 330 forks source link

Problem with custom ability model #610

Closed robertoperez-digital closed 1 year ago

robertoperez-digital commented 1 year ago

I made a custom ability model following the docs, It extends from Silber\Bouncer\Database\Ability; when I try to give user a permission like this

Bouncer::allow($user)->to('permission', $entity)

I got Column not found: 1054 Unknown column 'permissions.custom_ability_id'

In my provider I set table name 'abilities' => 'custom_abilities', I run my migration and again I get Column not found: 1054 Unknown column 'permissions.custom_ability_id' When I try to give a permission

I changed migration file to this Schema::create(Models::table('permissions'), function (Blueprint $table) { $table->bigIncrements('id'); $table->bigInteger('custom_ability_id')->unsigned()->index();

And I can give the user the permission but when I call $user->can('permiso', $entity)

I got Column not found: 1054 Unknown column 'permissions.ability_id'

Am I missing something?

JosephSilber commented 1 year ago

Laravel guesses the foreign IDs from your model's class name.

I just updated the readme with this note:

Eloquent determines the foreign key of relationships based on the parent model name (see the Eloquent docs). To keep things simple, name your custom classes the same as Bouncer's: Ability and Role, respectively.

If you need to use different names, be sure to either update your migration file or override the relationship methods to explicitly set their foreign keys.

robertoperez-digital commented 1 year ago

OK, so I made this

use Silber\Bouncer\Database\Ability as BAbility; //to avoid errors when extending from Ability

class Ability extends BAbility { ... This way my custom ability class can have the same name as the bouncer ability class with no problems

Everything works as expected, thank you!