متین طیبی نیا
4 سال پیش توسط متین طیبی نیا مطرح شد
0 پاسخ

گذاشتن محدودیت دانلود برای کاربر

سلام وقت بخیر
من میخوام اگر یوزر سابسکرایب کرده باشه یک محصول تو ماه مثلا 20 بیشتر نتونه دانلود کنه من برای اون کار یک کلاس جداگانه درست کردم به اسم file.php👇👇

<?php

namespace App\Utility;

use App\Utility\User as USER;
use App\User as UserAlias;

class File
{
    public static function user_can_download($user_id)
    {
        if (!USER::is_user_subscribed($user_id)) {
            return 'false';
        }
        $userItem = UserAlias::find($user_id);
        $user_subscribe = $userItem->currentSubscribe()->first();
        if (!$user_subscribe) {
            return 'false';
        }
        if ($user_subscribe->subscribe_download_count >= $user_subscribe->subscribe_download_limit) {
            return 'false';
        }
        return true;
    }
}

و در درون این کلاس یک کلاس دیگه به اسم User فراخوانی کردم که وظیفه داره آیا یوزر سابسکرایب دارد یا نه

namespace App\Utility;

use App\models\subscribes;
use App\User as UserModel;
use Carbon\Carbon;

class User
{
    public static function is_user_subscribed(int $user_id=null):Bool
    {
        $user= UserModel::find($user_id);
        if (!$user) {
            return false;
        }
        $user_subscriber=$user->CurrentSubscribe()->first();
     // dd($user_subscriber);
        return !empty($user_subscriber) && ($user_subscriber instanceof subscribes);

    }
}

و در مدل های Userوsubscribe ریلیشن ایجاد کردم
مدل User

<?php

namespace App;

use App\models\package;
use App\models\payment;
use App\models\subscribes;
use App\models\UserPackage;
use Carbon\Carbon;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{

    use Notifiable;
    const ADMIN=3;
    const USER=1;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    public function subscribes()
    {
        return$this->hasMany(subscribes::class,'subscribe_user_id');
    }

    public function CurrentSubscribe()
    {
        return $this->subscribes()->where('subscribe_expired_at','>=',Carbon::now());
    }
}

مدل subscribe :

<?php

namespace App\models;

use Illuminate\Database\Eloquent\Model;

class subscribes extends Model
{
    //
    protected $table='subscribers';
    protected $primaryKey='subscribe_id';
    protected $guarded=['subscribe_id'];
    public $timestamps=false;
    protected $dates=[
        'subscribe_expired_at'
    ];
/*  const CREATED_AT='subscribe_created_at ';
    const UPDATED_AT = 'subscribe_expired_at';*/
    public function user()
    {
        return $this->belongsTo(subscribes::class,'subscribe_user_id');
    }
}

و این کد قسمت تابع دانلود از FileController هستش :

    public function download(Request $request, int $file_id)
    {

        $CurrentUser = Auth::user();
        if (!FileUtility::user_can_download($CurrentUser->id)) {
            return redirect()->route('frontend.File.access');
        }
        $fileItem = file::find($file_id);
        if (!$fileItem) {
            return redirect()->back()->with('fileError', 'فایل درخواستی معتبر نمی باشد');
        }
        $basePath = public_path('file\\');
        $filePath = $basePath . $fileItem->file_name;
        $Res = $CurrentUser->CurrentSubscribe()->first();
        $Res->increment('subscribe_download_count');
        return response()->download($filePath);
    }

(file.php با اسم FileUtility فراخوانی کردم )
با تابع incrementباید subscribe_download_count اضافه بشه ولی به کالوم subscribe_download_countدر دیتابیس آپدیت نمیشه
اما دانلود انجام میشه !


ثبت پرسش جدید

به همدیگه کمک کنیم

به متین طیبی نیا کمک کنید تا مشکل خودش را حل کند؛ این‌طور می‌توانیم با هم پیشرفت کنیم.

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام