我需要做的是扩展Spatie权限包Role模型的所有功能,但为派生模型使用不同的表。
现在我有一个模型SubscriptionPackage,我想模拟一个角色的行为,这样它就可以被分配权限,反过来这个模型可以被分配给用户。但我也想保持榜样的完整。
我尝试过扩展Yes,但是当我创建一个新的SubscriptionPackage时,新的记录是在roles表中创建的,而不是在subscription_packages表中创建的,尽管在我的派生模型中指定了该表。如下所示
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use App\Models\Permission; // This extends from Spatie\Permission\Models\Permission
use Spatie\Permission\Models\Role as SpatieRole;
class SubscriptionPackage extends SpatieRole
{
//
protected $guarded = ['id'];
protected $table = 'subscription_packages';
/**
* The permissions that belong to the package.
*/
public function packagePermissions()
{
return $this->belongsToMany(Permission::class);
}
}
通过上面的代码,我希望当我创建一个新的SubscriptionPackage时,记录应该插入到subscription_packages表中,但在这种情况下,它会进入roles表。任何关于如何做到这一点的建议都将受到高度赞赏。
3条答案
按热度按时间ctzwtxfj1#
如果你看一下
Role
的源代码,你会在__construct
方法中看到:所以,如果你想让
SubscriptionPackage
把它的记录写在正确的表中,你必须像这样覆盖这个行为:qacovj5a2#
我不认为你可以。Spatie已经有5个表,并且仅从这些表中获取数据。但是如果你想做一些改变,你必须在模型中对表和列名做一些改变。
bvuwiixz3#
发布配置并在'configure/permission.php'中更改表名