【问题标题】:Let users access to part of website only if they're approved仅在获得批准后才允许用户访问部分网站
【发布时间】:2017-07-27 03:43:56
【问题描述】:

我正在使用 laravel 5.4,我的网站有一部分提供下载链接,但我只需要将此下载链接提供给为该链接付费的用户。

示例: 我有用户可以购买来学习的课程。每门课程都有不同的下载链接。在这里,我想显示用户购买给他/她的确切课程的下载链接,而不是 30 天内的所有课程。

我该怎么做?

PS:我只需要关于如何关联数据库结构的指南 特定用户仅在有限时间内参加特定课程。

谢谢。

【问题讨论】:

  • 你用的是什么认证系统?
  • @Maxime 你是什么意思?我安装了make:auth,现在我正在使用自定义路由。

标签: php database laravel


【解决方案1】:

我对 Laravel 并没有那么丰富的经验,但是用 PHP 很容易做到。您可以做的一件事是将信息存储在这样的会话中:

$_SESSION['premium'] = true;

那么你可以像这样检查会话是否为真:

if ($_SESSION['premium'] = true) {
    # Paid content
} else {
    echo "Sorry! This is for premium members only!";
}

您还可以选择查询数据库以查看用户是否将名为“付费”的列设置为 1(true) 或 0(false)。我假设您了解如何操作。

回应您最近的评论:

使用这些列创建一个名为 purchases 的表:

  • 身份证
  • user_id
  • course_id

然后在页面上,查询那个表:

$query = mysqli_query($connection_variable, "SELECT * FROM purchases WHERE user_id='$_SESSION['username'] AND course_id='$course_id'");
if (mysqli_num_rows($query) > 0) {
    #Show course
} else {
    echo "ERROR MESSAGE HERE";
}

试试看,告诉我结果如何!

【讨论】:

  • 谢谢,我明白你的意思,但我需要知道如何将用户连接到支付的确切课程,除非我批准付款后所有课程都对用户开放!
  • @RobertNicjoo 参考我的回答,我刚刚编辑过。
  • @hoogleyBoogly 我创建了购买表和我现在可以传递给它的信息,但是下载链接到期怎么样?
  • @RobertNicjoo 您可以尝试为购买表添加另一列,将其命名为“过期”,然后添加一个时间,例如用户购买课程后的 10 天。使用PHP检查日期并与数据库中的日期进行比较。
【解决方案2】:

假设您的用户首先登录。

使用user_idcourse_id 和时间戳为Purchases 创建一个模型,并设置一对多关系。

在您的逻辑中,当有人购买课程时,您会将记录添加到上面的“购买”表中。假设您有这些购买的列表,您将通过

获取这些购买
User::find(1)->purchases

这将返回他们被允许下载的购买。您可能需要使用范围进行额外验证以影响您的 30 天可用性规则,例如仅当今天的日期在 created_at 列的 30 天内时才可以下载。

【讨论】:

  • 谢谢,现在我有了购买表,我可以获取用户及其订单的所有信息,但仍然对scope 以及如何使其过期感到困惑?
  • 创建一个名为 scopeActive 的本地范围,然后对查询对象执行 whereRaw,该查询对象应仅返回今天与 created_at 列之间的差异应小于 30 天的记录。
猜你喜欢
  • 1970-01-01
  • 2014-10-22
  • 2019-10-22
  • 1970-01-01
  • 1970-01-01
  • 2012-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多