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

Laravel Mass Assignment

Mahmoud Alrashidi

السؤال

Recommended Posts

  • 0

Mass Assignment او التعيين الجماعي هو عندما تقوم بإرسال مصفوفة بمفاتيح و قيم مُتنوعة للعملية إنشاء كائن ما سواء عن طريق الباني أو عن طريق دوال eloquent مثل create او update:

<?php

$model = new Model([
	'key1' => 'value1',
  	'key2' => 'value2',
  	.
  	.
  	.
]);

// او 

$model = Model::create([
	'key1' => 'value1',
  	'key2' => 'value2',
  	.
  	.
  	.
]);

// او 

$model->update([
	'key1' => 'value1',
  	'key2' => 'value2',
  	.
  	.
  	.
]);

في هذه الحالة لارافيل ستُحاول حمايتك تلقائياً من بعض الثغرات التي تُسببها هذه العملية.

قد يظهر لك الأمر عادي لكن هذه العملية تحميك كثيرا مثلاً إذا كان لديك جدول للمُستخدمين و به عمود is_admin إذا كانت قيمته 1 فإن المُستخدم سيكون مُشرف في التطبيق، قد يستغل اي شخص ذلك و يُرسل حقل مخفي is_admin مع الطلب قيمته 1 و بالتالي سيُصبح مشرف بدل أن يكون مستخدم عادي.

توفر laravel طريقة للحماية من هذا الأمر فيُمكنك مثلا إستخدام الطريقة العادية في إنشاء كائن جديد بتعيين الخصائص بشكل منفصل:

<?php

$model = new Model();
$model->prop1 = "value1";
$model->prop2 = "value2";
.
.
.
$model->save();

لكن إن أردت إستخدام التعيين الجماعي  يُمكنك إستخدام أحد المصفوفات fillable او guarded الموجودتان ضمن النموذج حيث في المصفوفة fillable تضع كافة الخصائص التي تريد أن تُعين جماعياً:

protected $fillable = ['prop1', 'prop2'];

أما المصفوفة guarded فتُستخدم لحماية بعض الخاصيات التي لا تريد أن تُعين جماعياً على سبيل المثال:

protected $guarded = ['is_admin'];

بطبيعة الحال يُمكنك فقط إستخدام أحد المصفوفتين فهما يعملان عكس بعضهما، ف fillable تعني القائمة البيضاء و guarded تعني القائمة السوداء

أما بخصوص:

بتاريخ 55 دقائق مضت قال كمال محمودي:

و ما معني الخطأ التالي Page Expired 419

غالباً ما يحدث هذا الخطأ بسبب csrf token تقوم لارافيل بحقنه في الجلسة و إرساله مع كل نموذج لذلك إن كان لديك نموذج form يجب عليك إضافة الحقل المخفي csrf سواء عن طريق:

<form action="" method="post">
    @csrf
    ...

او عن طريق 

<form action="" method="post">
  {{ csrf_field() }}
  ...
	

أحيانا يكون هذا الحقل مُضمن في النموذج و يحدث الخطأ و ذلك راجع غالباً لإنتهاء الجلسة او أن الجلسة لم يتم حفظها بشكل جيد، إفتراضياً يتم حفظ الجلسات على شكل ملفات في المُجلد storage. قد لا تكون الصلاحيات المُطبقة على هذا المُجلد مناسبة مما لا يسمح بحفظ الملفات عليه.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

Mass Assignment هي عندما ترسل مصفوفة إلى إنشاء النموذج, بشكل أساسي تقوم بتعيين مجموعة من الحقول على النموذج دفعة واحدة, بدلاً من واحد تلو الأخر. مثل.

$post = new Post(request()->all());

يمكن استخدام fillabel لوضع حماية على جميع جميع الحقول التي تريد الإضافة لها إو تحديثها.

protected $fillable = ['name', 'email'];

ويمكن استخدام $guarded  بهذا الشكل لمنع أي حقل من التخصيص الجماعي. 

protected $guarded = [];
protected $guarded = ['age'];

أو يمكن استخدام 

protected $guarded = ['*'];

لمنع التخصيص الجماعي للحقول كافة.

اقتباس

ما معني الخطأ التالي Page Expired 419

يمكنك إضافة @csrf للنموذج بهذا الشكل وهذا يحدث اما بسبب التصاريح المطبقة على المجلد أو بسبب انتهاء الجلسة.

<form action="" method="post">

	  @csrf

	  <div class="box-body">
		@if ($errors->any())
			<div class="alert alert-danger">
				<ul>
					@foreach ($errors->all() as $error)
						<li>{{ $error }}</li>
					@endforeach
				</ul>
			</div>
		@endif
		<div class="form-group">
		  <label for="name">الأسم بالكامل</label>
		  <input type="text" name="name" class="form-control" id="name" placeholder="اسم المستخدم" value="{{ old('name') }}">
		</div>
	  
	  

	  <div class="box-footer">
		<button type="submit" class="btn btn-primary">حفظ</button>
	  </div>
</form>

لو استمرت المشكلة تأكد من التصاريح لمجلد storage يمكنك من التأكد أنه يحمل التصريح 770 أو 777.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...