اذهب إلى المحتوى

السؤال

نشر

نفترض ان عندي items في جدول بالموقع وبنهاية كل صف في الجدول يوجد زر لتعديل الitem

عند الضغط على الزر يحولني لصفحة تعديل الitem التي بها form يحتوي على اسم الitem وال description وحقلid من نوع hidden

فكما تعلمون اذا قام احد بفتح الpage source الخاصة بالموقع سيجد الid مكشوف له ويستطيع تعديله

كما تعلمون انه عندما استقبل بيانات الform اقوم بعمل جملة update على البيانات المدخلة عندما يساوي حقل الid المُستقبل نفس الحقل بالداتا بيز أي:-

UPDATE
items
SET item = ?, description = ?
WHERE
id = ? // bind id with $_POST['id']

فإذا كان الid الفعلي = 1 وقام الشخص بتعديل الid من الpage source وجعله يساوي 2 مثلا فسيتم تعديل item غير مسموح له بتعديلها..

السؤال هو.. هل يوجد أي طريقة لتشفير الid في الhidden input وفك تشفيرها عند استقبالها مرة اخرى في الphp ام لا؟

اريد تشفير حقل الid وإعادة فك تشفيره مرة اخرى عند استقباله ب php

ارجو ان يكون الحل بإستخدام php او php laravel

Recommended Posts

  • 0
نشر

يمكنك تشفير ال id في دالة  ال edit ويكون مشفر وتضع قيمته المشفره ك hidden input

و عندما تقوم بعمل form submit قم بفك التشفير عن ال id واستخدامه

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Crypt;

class UserController extends Controller
{

    public function edit(Request $request, $id)
    {
        $encryptedId = Crypt::encryptString($id);
		....
    }

	// يكون ال id مشفر
    public function update(Request $request, $id)
    {
        $userId = Crypt::decryptString($id);
		....
    }

}

 

  • 0
نشر (معدل)

لا حاجة لتشفير الـ ID لحل المشكلة فعليا , عوضا عن ذلك يمكنك إنشاء دالة أو middleware يقوم بالتحقق من ملكية العنصر item قبل عمل أي تعديلات عليه .

مثال عملي :

<?php 
  
class YourController extends Controller {
    
   public function editItem(Request $request ,Item $item){
     
     if(! $this->isOwner($item)){
       return 'لا يمكنك تعديل العنصر';
     }
     
     // تكملة العملية 
      
     
     
   }
   private function isOwner($item){
     if(auth()->user()->id == $item->user_id){
       return true;
     }
     
     return false;
   }
    
تم التعديل في بواسطة Adnane Kadri
  • 0
نشر

هذه تسمى مشكلة صلاحيات و لاتحل عن طريق تشفير id بل نقوم بعمل Middleware تقوم بالتحقق من صلاحيات المستخدم يمكنعمل ذلك  على النحو التالي:

في المتحكم الخاص بك قم بوضع دالة التحقق على دالة التعديل

class Foo extends Conroller
{
    public function __construct() {
 
        $this->middleware('post-edit', ['only' => ['edit']]); // يتم التحقق من الصلاحيات قبل تنفيد الأمر بالتعديل
    }
  
  public function edit(Request $request, $id)
  {
  	//تعديل المقال 
  }
}

بعد ذلك نتأكد من الصلاحيات بواسطة post-edit middleware 

<?php

namespace App\Http\Middleware;
use Closure;

class PostEditMiddleware {
   public function handle($request, Closure $next) {
      if(Auth::user()->id == $request->input('user_id')) // نتحقق أن العنصر خاص بالمستخدم ولديه صلاحية التعديل عليه
      return $next($request);
      return Response::make("Unauthenticated", 401); // في حالة ليس لديه الصلاحية نقوم بإسترجاع رسالة عدم الصلاحية
   }
}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...