مستخدم ضيف
انضم إلينا اليوم!
تسجيل الدخول التسجيل
الرئيسية
الدورات
المدونة
Veya ai chat
المميزات
حول
الاتصال
الخصوصية
الشروط
الإعدادات
الإنجليزية العربية
الدعم
مساعدة
Lavidya - AI Learning Platform
  • الرئيسية
  • الدورات
  • المدونة
  • Veya ai chat
  • المميزات
  • حول
  • الاتصال
  • الخصوصية
  • الشروط
    • الإنجليزية
    • العربية

مقال المدونة

  • الرئيسية
  • الرئيسية
  • المدونة
  • Query-Based Access Control: إز...

Query-Based Access Control: إزاي تتحكم في الداتا من غير ما تلمس الكود

يا صاحبي، خلينا نتكلم شوية عن نظام التصميم اللي بيخليك تنام مرتاح 🧠⚙️

تخيل معايا لو عندك نظام فيه ملايين الريكوردز ومستخدمين بأدوار مختلفة: Admin، HR، Manager، User عادي… يعني حاجة عجيبة! كلهم بيشوفوا نفس الجدول، لكن مش نفس الداتا.

طيب، مثال بسيط بس قاتل. تخيل إنك تشوف قائمة الموظفين:

  • تشوف قائمة الموظفين؟ تمام ✅
  • تشوف المرتب؟ لأ ❌
  • تشوف العنوان؟ ممكن
  • تشوف الرقم القومي؟ حسب الدور

والباقي عليك، هنا تبدأ المصيبة 👀

لو كل مرة هتدخل تعمل:

if ($user->isAdmin()) { select * } else { select name, email }

أنت كده دخلت في جحيم: - كود مليان if/else - صعب يتصان - أي تغيير Permission = تعديل كود + Deploy - Bugs مالهاش آخر - Security holes لو نسيت شرط واحد 😬 وده مش System Design… ده عبث منظم.

المشكلة الحقيقية

المشكلة مش في الـ Users ولا في الـ Records، المشكلة إنك رابط الصلاحيات بالكود. والصح إنك تنقل الصلاحيات للداتا نفسها، مش للتطبيق.

الحل الذكي: Query-based Access Control 🧩

الفكرة العبقرية هنا إن الـ Admin هو اللي يحدد، مش الـ Developer. يعني إيه؟

الـ Admin عنده شاشة:

  • بيكتب Query
  • أو يختار Fields
  • أو يحدد View
  • ويربطها بـ User أو Role

مثلاً:

SELECT id, name, email, department FROM employees

وده User عادي User تاني:

SELECT id, name, email, department, salary FROM employees

بس كده. من غير ما تلمس سطر كود واحد 🔥

طيب التنفيذ بيكون إزاي؟

1️⃣ Row / Column Level Security

أنت عملياً بتعمل: - Dynamic Queries - SQL Views - Stored Queries محفوظة في DB والـ User بياخد Access على Query مش على Table

2️⃣ استخدام CTEs بذكاء 💡

في الباك إند: - تجمع كل الـ Queries المسموح بيها لليوزر - تدمجهم باستخدام WITH (CTE) - وتطلع Result واحدة نهائية

مثال مبسط:

WITH allowed_data AS ( -- queries user has access to ) SELECT * FROM allowed_data;

كده: - اليوزر مهما حاول - مهما لعب في الـ Request - عمره ما يشوف غير اللي الـ Query سمحله بيه - Security by design 🔐

الميزة الخطيرة هنا 🔥

  • ❌ مفيش if/else في الكود
  • ❌ مفيش خوف إنك تنسى Field
  • ✅ Permissions بتتغير Runtime
  • ✅ Admin يضيف / يعدل من غير Deploy
  • ✅ Scales بسهولة مع ملايين Records

وده بيفرق بين: - CRUD Developer 👶 - System Designer 🧔‍♂️🔥

طب ما العيوب؟ (عشان نكون صُرحا)

آه، الحل ده: - معقد شوية في الأول - محتاج Validation قوية على الـ Queries - لازم تمنع SQL Injection تماماً - محتاج Logging محترم

بس… - التعقيد هنا في مكانه الصح - مرة واحدة وتكسب نظام: - Secure - Flexible - Enterprise-ready

الخلاصة 🧠

لو نظامك: - فيه Data حساسة - Roles كتير - Permissions بتتغير - عايز تنام مرتاح

يبقى: - ما تربطش الصلاحيات بالكود - اربطها بالكويري - والساعة هتحس إن النظام بيشتغل معاك… مش ضدك 😎

معلومات المقال

Query-Based Access Control: إزاي تتحكم في الداتا من غير ما تلمس الكود
  • الفئة: علوم الحاسوب
  • منشور: Jan 25, 2026
  • وقت القراءة: 1 دقيقة
  • الكاتب: Naser

هل كان هذا مفيداً؟

مشاركة المقال

شارك هذا المقال مع الآخرين

مقالات ذات صلة

خلف الكواليس: ازاي الـ Routing شغال في PHP Native
خلف الكواليس: ازاي الـ Routing شغال في PHP Native

Feb 03, 2026

إزاي المنصات الكبيرة بتحمي فيديوهاتها؟
إزاي المنصات الكبيرة بتحمي فيديوهاتها؟

Jan 26, 2026

إزاي تتحكم في استخدام الـ Guest Users حتى لو بيستخدموا VPN أو Incognito
إزاي تتحكم في استخدام الـ Guest Users حتى لو بيستخدموا VPN أ...

Jan 26, 2026

Lavidya - AI Learning Platform

"لافيديا جعلت التعلم سهلاً وممتعاً. ذكاء اصطناعي يفهم التعليم حقاً."

حقوق النشر © 2026 Lavidya. جميع الحقوق محفوظة.