2

是否可以使用 Spatie 的laravel-permission包来实现类似于 Facebook 对页面的权限所拥有的功能?

案例分析,

在 Facebook 上,您可以创建一个页面,然后您将自动成为该页面的管理员假设它是一个角色)。然后您可以邀请您的朋友并让他/她成为发布者角色

之后,您的朋友也可以邀请您加入他们的主页并让您成为编辑这是您的另一个角色

所以最后你将有两个不同的配置文件/页面的两个角色。

我想在我的应用程序上实现类似的目标。

编辑

我现在知道的是我可以使用:

$user->assignRole('editor');

我可以检查用户是否具有以下角色:

$user->hasRole('writer')

但问题是我如何将该角色与我希望他们管理的页面链接?

就像您在一个页面中具有管理员角色而在另一页面中具有编辑角色一样。如果你只是检查$user->hasRole('admin')结果是否总是正确的。所以我想知道我是否可以做任何事情来分配并检查您管理哪个页面。

我希望我说得通。

4

2 回答 2

0

的。您可以使用 artisan 创建角色并在 php.ini 中分配它们。

php artisan permission:create-role editor
php artisan permission:create-role publisher
$user->assignRole(['editor', 'publisher']);

所有这些都可以在文档中轻松获得

于 2019-12-05T12:32:15.240 回答
0

假设您的表结构如下所示:

页表

|---------------------|------------------|------------------|------------------|
|          id         |       name       |   created_at     |   updated_at     |
|---------------------|------------------|------------------|------------------|
|          12         |    PHP masters   |    2019-02-31    |   2019-03-12     |
|---------------------|------------------|------------------|------------------|

页面管理员

|---------------------|------------------|------------------|------------------|
|          id         |      page_id     |      role_id     |     user_id      |
|---------------------|------------------|------------------|------------------|
|          1          |         12       |         2        |        2         |
|---------------------|------------------|------------------|------------------|

角色表

|---------------------|------------------|------------------|------------------|
|          id         |       name       |   created_at     |   updated_at     |
|---------------------|------------------|------------------|------------------|
|          12         |      Editor      |    2019-02-31    |   2019-03-12     |
|---------------------|------------------|------------------|------------------|
|          12         |   System Admin   |    2019-02-31    |   2019-03-12     |
|---------------------|------------------|------------------|------------------|
|          12         |    Page Admin    |    2019-02-31    |   2019-03-12     |
|---------------------|------------------|------------------|------------------|

现在在用户模型里面添加这个方法

#do not forget to import Roles
#use Spatie\Permission\Models\Role;

    public function can_manage($page_id) : bool;
    {

        #Backdoor for the system admin
        if ($this->hasRole(['System Admin'])) {
            return true;
        }


        #now we check if the user has the role for that page
        $role = Role::select('name')
                        ->join("page_admins", 'page_admins.role_id', '=', 'roles.id')
                        ->where("page_id", $page_id)
                        ->where("user_id",   $this->id)
                        ->first();


        #return true if roles was found
        if (!empty($role)) {
            return true;
        }


        #else false
        return false;


    }

最后,如果您想检查用户是否可以访问您使用的页面管理员:

#for jwt-auth
#$user = $request->user(); 

if ( $user->can_manage($page_id) )
{
   #then do you things
}

既然您已经了解了如何检查某人是否在页面管理中,那么您就可以发挥创意了。您可以创建一个方法:

#Get user role in the page
#etc
于 2019-12-10T07:37:03.383 回答