【问题标题】:multi admin in laravel projectlaravel 项目中的多管理员
【发布时间】:2018-06-28 08:58:24
【问题描述】:

有一个Hotels项目,每个酒店都有一个管理员。

我做了什么:
Usertype 表中不同类型的用户,如厨师、经理、酒店

如果用户类型是酒店,则表示它是该酒店的管理员。 现在,对于每一个 CRUD 和其他功能,我都会得到这样的酒店 ID
$hotel_id = \Auth::user()->hotel_id;
并在每个查询中检查了这个hotel_id(like get user, save user, get invoice,set invoice,check food etc)。
这是正确的方法吗?

【问题讨论】:

    标签: php laravel laravel-5.2 laravel-5.4


    【解决方案1】:

    是的,这是检查用户是否是酒店管理员的正确方法。但最好为此使用策略:

    public function update(User $user, Hotel $hotel)
    {
        return $user->id === $hotel->user_id;
    }
    

    策略是围绕特定模型或资源组织授权逻辑的类。

    https://laravel.com/docs/5.5/authorization#generating-policies

    【讨论】:

    • 使用中间件检查用户类型是否为酒店,然后我将该用户记录为该酒店的管理员(用户表中的酒店 ID)但我的问题是:在 CRUD 和其他功能的所有功能中(预订酒店,profile,departments ) 我需要获取 $hotel_id = \Auth::user()->hotel_id;对于控制器的每个(数据库查询)功能,以验证这属于已登录的同一家酒店。
    • 正如我所说,您不应该在控制器中执行此操作,请为此使用策略类。在策略中,您可以检查经过身份验证的用户的 hotel_id 是否等于酒店 ID。查看更新答案中的示例。
    猜你喜欢
    • 2015-01-24
    • 1970-01-01
    • 2017-08-16
    • 2014-10-08
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多