此包已废弃,不再维护。作者建议使用laravel-doctrine/orm包代替。

Laravel的Doctrine ACL包

1.0.3 2019-10-25 07:55 UTC

This package is auto-updated.

Last update: 2020-05-18 07:32:57 UTC


README

Laravel 5的Doctrine ACL包

  • 使用Doctrine用户实体进行登录
  • 用户角色
  • 用户封禁
  • 用户暂停
  • 用户权限
  • 用户最后登录和最后尝试事件监听器
  • 角色权限

安装

config/app.php中包含服务提供者

'Brouwers\LaravelDoctrine\DoctrineServiceProvider',
'Maatwebsite\Usher\UsherServiceProvider'

配置

要更改此包的默认值,请发布配置

php artisan vendor:publish --provider="Maatwebsite\Usher\UsherServiceProvider"

默认用法

开箱即用,您可以使用ACL系统而无需定义自己的实体。但是,这不被推荐!

自定义用法

例如,如果您想要一个CustomerGroup实体,您只需确保它实现了Maatwebsite\Usher\Contracts\Users\User接口。如果您需要一个更快的解决方案,您可以选择性地扩展MappedSuperclass Maatwebsite\Usher\Domain\Users\User。*注意,您将需要自己定义角色关系。

使用MappedSuperclass的示例


use Doctrine\ORM\Mapping as ORM;
use Maatwebsite\Usher\Domain\Users\User;
use Maatwebsite\Usher\Contracts\Users\User as UserInterface;

/**
 * @ORM\Entity(repositoryClass="DoctrineCustomerRepository")
 * @ORM\Table(name="customers")
 * @ORM\HasLifecycleCallbacks()
 */
class Customer extends User implements UserInterface
{
    /**
     * @ORM\ManyToMany(targetEntity="Group", inversedBy="customers")
     * @ORM\JoinTable(name="customer_groups")
     * @var ArrayCollection|\App\Domain\Customers\Entities\Role[]
     */
    protected $groups;
    
    /**
     * Customer Constructor
     */
    public function __construct()
    {
        $this->groups = new ArrayCollection();
    }
    
    /**
     * @return ArrayCollection|\Maatwebsite\Usher\Contracts\Roles\Role[]
     */
    public function getRoles()
    {
        return $this->groups;
    }
  }

User MappedSuperclass类似,您需要自己定义用户关系。

/**
 * @ORM\Entity(repositoryClass="DoctrineRoleRepository")
 * @ORM\Table(name="groups")
 * @ORM\HasLifecycleCallbacks()
 */
class Group extends Role implements RoleInterface
{

    /**
     * @ORM\ManyToMany(targetEntity="Customer", mappedBy="groups")
     * @var ArrayCollection|Customer[]
     **/
    protected $customers;

    /**
     * Role Constructor
     */
    public function __construct()
    {
        $this->customers = new ArrayCollection();
    }

    /**
     * @return ArrayCollection|\Maatwebsite\Usher\Contracts\Users\User[]
     */
    public function getUsers()
    {
        return $this->customers;
    }
}

接下来,您需要更新config/usher.php中的类引用,以更新user.entityrole.entity

return [
    'users'  => [
        'entity' => 'Customer'
    ],
    'roles'  => [
        'entity' => 'Group'
    ]
]

事件

域事件

域事件
UserGotAssignedToRole $user->assignRole($role)
UserGotBanned $user->ban()
UserGotRemovedFromRole $user->removeRole($role)
UserGotSuspended $user->suspend($minutes)
UserRegistered $user->register()
UserUpdatedProfile $user->update()
RoleWasCreated $role->create()
RoleWasUpdated $role->update()

事件监听器

事件监听器可以在配置中启用或禁用。默认情况下,列出的监听器都启用了。

监听器
SaveLastAttemptDate auth.attempt
CheckIfUserIsBanned auth.attempt
CheckIfUserIsSuspended auth.attempt
SaveLastLoginDate auth.login