当前位置: 首页 > 知识库问答 >
问题:

Laravel用户、角色、权限关系实现问题

曹鹏海
2023-03-14

我有三个模型用户角色权限。这些模型与其表之间存在复杂但众所周知的关系。

表及其列:

因此,每个用户只有一个角色,每个角色都有许多权限。

<?php

class User
{


public function role()
{
    return $this->belongsTo(Role::class);
    
}

public function permissions()
{
    return $this->hasManyThrough(Permission::class,Role::class);
}
}


class Role
{


public function users()
{
    return $this->hasMany(User::class);
  
}

public function permissions()
{
    return $this->belongsToMany(Permission::class);
    
}
}


class Permission
{


public function roles()
{
    return $this->belongsToMany(Role::class);
    
}

public function users()
{
    return $this->hasManyThrough(User::class,Role::class);
}
}

我可以访问

  1. $用户-

除了

  1. $权限-

返回sql错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'roles.permission_id' in 'field list' (SQL: select `users`.*, `roles`.`permission_id` as `laravel_through_key` from `users` inner join `roles` on `roles`.`id` = `users`.`role_id` where `roles`.`permission_id` = 1) 

但为什么呢?

共有1个答案

扈俊健
2023-03-14

你能这样试试吗:

public function users()
{
    return $this->hasManyThrough(
        User::class,    // The model to access to
        PermissionRole::class,    // The intermediate table that connects the User with the Role.
        'permission_id',   // The column of the intermediate table that connects to this model by its ID.
        'role_id',    // The column of the intermediate table that connects the Role by its ID.
        'id',    // The column that connects this model with the intermediate model table.
        'role_id'   // The column of the Users table that ties it to the Roles. 
    );
}

我找到了这篇文章。

如果您将其与您的表格进行比较,可能会如下所示:

  • audio_files表是你的用户
  • 播客表是您的角色
  • 订阅表是您的permission_role
  • 用户表是您的权限

也许这很混乱,但请让我知道这是否有效。

 类似资料:
  • 有些企业会对向用户发送的营销内容进行严格的管理——基层的运营或营销经理拟定的活动必须经过上级管理者的审批,方可生效执行。为此,诸葛的智能触达中提供了基于用户角色的触达活动权限管理,以支撑上述的企业需求。 如果您的团队需要使用权限控制,可通过以下步骤开启使用: 开启权限控制:智能触达的权限控制默认是关闭的,需要开启后方能使用; 分配用户角色:为团队成员分别分配设定「管理员」和「运营人员」角色; 开始

  • 下午好.如何在不使用不同的OAUTH2服务的情况下,为一个应用程序中的特定实体(类似于RBAC/ABAC)的特定控制器配置用户的权限和角色? 还有一个名为Project的实体。用户可能是许多项目的成员。有一些项目用户角色:PROJECT_ADMIN、PROJECT_EDITO、PROJECT_USER。每个项目角色都可以拥有自己的权限(权限),如向项目添加用户、编辑项目等。所有角色配置都存储在'P

  • 以下是权限、角色和permission\u角色的表结构 权限: id名称 id名称 permission\u角色: role\u id,permission\u id 这里permission_role是我的数据透视表。 在我的前端,我设置了这样的东西, welcome.blade.php 在我的控制器中。php 角色php 我无法将数据保存到数据透视表中。 我在php artisan tinke

  • 6.0 版本开始,管理员可以在用户管理界面为一个用户赋予一个角色,不同角色可以配置不同权限,目前支持 10 种权限。 6.1 版本开始,我们添加了一个新的权限 relo_quota(角色配额),该权限用来给某个用户的角色设置空间配额。例如,我们可以通过添加 'role_quota': '100g' 为 employee 角色设置100GB的空间配额,同时其他用户还是使用默认的空间配额。 Seafi

  • 因此,在我们的Laravel应用程序中有两个角色(internet客户端和管理员)。下面是DB模式 我们想允许www.site。com/登录路径,仅记录具有“客户端”角色的用户。 请注意,一旦用户登录并强制注销,我们不想检查角色。 谢谢

  • 我有3个用户角色:管理员、客户和员工。 登录后,每个角色将重定向到特定的仪表板,例如:-管理员:网站。com/admin-客户:网站。com/客户-员工:网站。通讯员/雇员 此时,无论我使用哪个用户角色,都可以通过这些网址访问所有内容。 限制客户打开admin的最简单方法是什么 Laravel版本5.2.45 PHP版本7.2我正在使用共享托管提供商。谢谢你们