【问题标题】:Laravel prevent user actionLaravel 阻止用户操作
【发布时间】:2018-09-22 12:45:45
【问题描述】:

我的项目使用 laravel 5.6 并委托处理用户/角色/权限。

但现在我面临另一个问题,我不知道该走哪条路。

基本上在我的数据库中,我有一个包含 x 列的“常规”表。每列代表我的应用程序的一部分,所以只有一行。

例如,我可以有一个包含 0、1 或 2 的“编辑帖子”列。

如何防止用户根据数据库值访问get/post路由?

如果edit-post等于2,用户可以查看编辑页面/发布编辑数据。

我必须使用中间件吗?盖茨?还有什么?

感谢您的回答。

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    您可以根据用户角色定义用户的权限和活动。像 Admin 、 Moderator 或 Super admin 。只需创建一个表,其中包含具有用户关系的角色名称并将身份验证与它挂钩。因此,每次用户登录时,他都可以前往他的特定区域并执行您定义的活动。 You can see this for better understanding

    【讨论】:

    • 与用户权限无关。如果edit_post = 1,每个用户都不能编辑帖子
    【解决方案2】:

    正如Raggib所说:创建users表权限:

     Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('role');
    });
    

    创建一个中间件以检查用户是否有权访问您要保护的记录:

    if($loggedUser->role != 'admin'){
        // cannot edit
    }
    

    这种方法的好处是以后可以添加角色。这将使您能够更好地控制谁可以访问哪些记录。

    【讨论】:

    • 我必须阻止所有用户(包括管理员)执行操作。所以如果 edit_post = 1 那么所有用户都不能 edit_post。
    • 我不知道您的应用程序有哪些要求,但我强烈建议您使用上述方法。有一天,客户(甚至您)可能会改变主意,而您将需要多一个角色(例如,用户无论如何都可以编辑所有帖子)。那么你唯一需要检查的是他的角色。如果您只想使用edit_post = 1 执行此操作,那么您只需要创建一个中间件并将此中间件应用于您需要检查的路由,甚至在对帖子执行操作之前检查edit_post
    • 客户是我 :) 在中间件中,我如何访问 eloquent 模型?
    • 这就是问题所在。如果您有中间件,您将需要始终传递 ID 或标识模型的东西。 <input type="hidden" name="post_id" value="{{ $post->id }}"> 之类的东西,在中间件中,您将获得该模型来检查登录用户是否可以执行该操作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 2017-11-02
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    相关资源
    最近更新 更多