Back to Question Center
0

هل مشغلات بيتوز لا تزال ذات صلة في فب الحديثة؟            هي بيتويز أوبيراتورس لا تزال ذات صلة في الحديث فب المواضيع ذات الصلة: أنماط & أمب؛ براكتيسيبادينغ & أمب؛ Semalt

1 answers:
هل مشغلات بيتوز لا تزال ذات صلة في فب الحديثة؟

كثير منكم ربما خدش رؤوسك قراءة هذا اللقب. "بيتوات؟"

في هذه المقالة، سوف ننظر في ما هي مشغلي بتات، وما إذا كان استخدامهم لا يزال مناسبا في هذا العصر الحديث للحوسبة.

<إمغ سرك = "/ إمغ / 45c26316745974f12e5db896c521747b0 جبغ" ألت = "هل مشغلات بيتوز لا تزال ذات صلة في فب الحديثة؟هي بيتويز أوبيراتورس لا تزال ذات صلة في الحديث فب المواضيع ذات الصلة: أنماط وممارساتدبوجينغ & سيمالت "/>

مثال حالة الاستخدام

يتم سرد مشغلي الترددات هنا، ولكن لدفع نموذج المنزل حقا، سوف نركز على واحد فقط: بيتويز و ( و ). مثال جعلها انقر بالنسبة لي. لذلك هذا ما سنفعله - الغوص مباشرة إلى مثال - günstiger umzug regensdorf.

تخيل لديك موقع على شبكة الانترنت التي يمكن للمستخدم معين أذونات محددة. على سبيل المثال، مجلة مثل سيتيبوينت:

  • يمكن للمؤلف مسودات كرود، وتحرير ملفاتهم الشخصية.
  • يمكن للمحرر، بالإضافة إلى ما سبق، مسودات كرود ومناصب الانتهاء، وملفات المؤلف كرود.
  • يمكن للمشرف، بالإضافة إلى ما سبق، إضافة أذونات المسؤول.

سيمالت يمكن للمستخدم الحصول على أذونات متعددة، وهناك عدة طرق لتحديد الأذونات في قاعدة البيانات والنظام باستخدامه.

ذي دوبل جوين

إضافة أدوار وإضافة أذونات وإرفاق الأذونات إلى الأدوار في جدول الانضمام ثم إنشاء جدول ارتباط آخر وربط بعض الأدوار ببعض المستخدمين.

هذا النهج يخلق أربعة جداول إضافية:

  • أذونات
  • أدوار
  • أذونات <-> الأدوار
  • أدوار <-> المستخدمين

قليلا جدا من النفقات العامة. سيمالت وجود لتحرير هذه أو قائمة لهم في التطبيق بانتظام في بعض القوائم التي يزورها كثيرا. فقط التخزين المؤقت الثقيلة من شأنه أن ينقذ هذا التطبيق من الانهيار تحت الحمل الثقيل.

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

ذي سينغل جوين

إضافة أذونات، إضافة جدول الانضمام، إرفاق بعض الأذونات لبعض المستخدمين

يخلق هذا النهج جدولين إضافيين:

  • أذونات
  • أذونات <-> المستخدمين

أقل بكثير من المثال السابق، ولكن لديك العديد من الإدخالات في جدول الانضمام لأن المستخدم يمكن أن يكون الكثير من الأذونات (مجرد كرود للصياغة هو 4 أذونات من تلقاء نفسها). مع الكثير من المستخدمين والكثير من الأذونات، هذا الجدول يمكن الحصول بسرعة كبيرة.

العمود ستامبيد

إضافة عمود إلى جدول المستخدمين لكل إذن، ثم جعل نوع البيانات الخاصة به تينينت (أساسا منطقية) للتحقق من الإذن باسم "أون" أو "إيقاف".

سوف أذونات سيمالت للمستخدم ثم تبدو شيئا من هذا القبيل:

     أوبديت `users` سيت` editProfile` = 1، `deleteProfile` = 0،` createDraft` = 1، `publishDraft` = 0.. وير `id` = 5    

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

سيمالت، لأن قائمة الأعمدة، عندما نظرت من بعيد، يشبه الرقم الثنائي (1010)، وهذا النهج هو سيغواي ممتازة إلى آخر .

نهج بيتويز

سيمالت نحن الغوص أعمق في هذا النهج، دعونا لدينا دورة تحطم في ثنائي.

الأرقام الثنائية

جميع أجهزة الكمبيوتر تخزين البيانات كما ثنائي: 0 أو 1. لذلك، يتم تخزين الرقم 14 في الواقع كما: 1110. لذا فإن الرقم 1337 يعني:

  • 1 × 7
  • + 3 × 10
  • + 3 × 100
  • + 1 × 1000

سيمالت كل رقم في النظام العشري (قاعدة 10) يحصل مضروبا في 10. أول واحد هو 1، واحد القادم هو 10، وبعد ذلك بعد أن 100، 1000 المقبل، الخ

في الثنائية، والقاعدة هي 2، بحيث يحصل على ضرب كل رقم في 2. عدد 1110 هو بالتالي:

  • صفر × 1
  • + 1 × 2
  • + 1 × 4
  • + 1 × 8

سيمالت 2 + 4 + 8، وهو 14.

نعم، انها بسيطة لتحويل الأرقام الثنائية إلى عشري.

لذلك عندما ننظر إلى أعمدة لدينا من أذونات من قبل أن يكون 1010، التي قد ينظر إليها كذلك على أنها رقم 10 مكتوبة في شكل ثنائي. هم، ربما نحن على شيء هنا.

إذا كان لدينا 1010 أذونات، وهذا يعني يتم تعيين بت 2 و 4، في حين أن الأولى والثالثة ليست (لأنها هي 0).

في لغة ثنائية، ونحن نقول في الواقع لم يتم تعيين 0 و 2 بت، لأنها تحسب من 0، تماما مثل المصفوفات. ويرجع ذلك إلى أن عددهم ترتيبي (1، 2، 3) يتوافق مع أسهم. و 0 بت هو في الواقع 2 إلى قوة 0 (2 ^ 0) الذي يساوي 1. 1 بت هو 2 إلى قوة 1 (2 ^ 1) وهو 2. 2 هو 2 تربيع (2 ^ 2) التي يساوي 4، الخ. بهذه الطريقة كل شيء من السهل جدا أن نتذكر.

فكيف يساعدنا ذلك؟

نهج البتوي

حسنا، من خلال النظر في أذونات من بعيد، يمكننا تمثيل حالة جميع الأعمدة في وقت واحد مع رقم ثنائي واحد. إذا كنا يمكن أن تمثل جميع الأعمدة في وقت واحد مع رقم ثنائي واحد، وهذا يعني أننا يمكن أن تمثل أيضا مع عدد صحيح واحد عندما تترجم إلى عشري!

إذا كان لدينا عمود واحد أذونات العمود الذي يحتوي على قيمة 14 ، ونحن نعلم الآن أن هذا هو في الواقع 1110 ، ونحن نعلم أننا لديها ثلاثة من أصل أربعة أذونات! ولكن الذي 3 لدينا من 4؟

سيمالت رسم الخرائط التالية من الأذونات:

تغيير الأذونات إنشاء ملف شخصي إديت إديت الملف الشخصي ديليت مسودة كريت مشروع تعديل مسودة ديليت مسودة نشر انتهى التعديل انتهى الحذف
512 256 128 64 32 16 8 4 2 1

عدد 14 في ثنائي هو 1110، ولكن عدد الأصفار على اليسار لا يهم، حتى نتمكن من سادة ذلك حتى نصل إلى عدد من الأذونات في الجدول: 0000001110. هذا لا يزال 14، ممثل فقط من الأذونات من الجدول أعلاه. لجميع النوايا والمقاصد، 0000001110 === 1110.

ووفقا لذلك، نرى أن الحساب بإذن من 14 لديه الأذونات: DRAFT_DELETE ، DRAFT_PUBLISH ، و FINISHED_EDIT ). منح، وليس بالضبط ممثل الإعداد إذن العالم الحقيقي، لكنه مجرد مثال من خلالها يمكننا استقراء أنه إذا كان واحد أن يكون 1111111111، سيكون لديهم جميع الأذونات (من المحتمل أن مستخدم المشرف). في عشري، وهذا هو 1023. لذلك، شخص مع قيمة 1023 في العمود أذونات هو شخص لديه كافة الأذونات.

ولكن كيف يمكننا التحقق من ذلك في قانوننا؟ وبعبارة أخرى، كيف يمكننا أن نعرف إذا تم تعيين بت إذن أم لا ، وخاصة إذا تم تخزين عدد كعشرية، وليس ثنائي؟

هذا هو ما مشغلي بيتات ل - وخاصة العطف واحد و ، المعروف أيضا باسم بيتويز و . يمكنك التحقق من البتات الأخرى بمجرد تغيير قيمتها: 256 أو 128 أو 64 أو 32 أو 16 أو 8 أو 4 أو 2 أو 1.


و [اختياري] "دعونا الحصول التقنية" الجانب ملاحظة

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

عندما نقول و 512 والأذونات نحن نبحث عن الجزء بعد و أن تكون ترو، لأن هذه هي الطريقة التي تعمل بها استعلامات سكل - تقييم الظروف وإعادة تلك الصفوف التي ترجع صحيح فيما يتعلق بالمتطلبات .

ولذلك، 512 والأذونات أن تقييم إلى صحيح. ونحن نعلم أن أي قيمة غير صفرية، سواء كان عدد صحيح، منطقية أن تقول "صحيح"، أو سلسلة غير فارغة، ويعتبر في الواقع "صحيح". لذلك 512 صحيح. 1 صحيح. 0 غير صحيح. 128 صحيح. الخ

512 هو عدد صحيح من 10 إلى 10، و أذونات هو عمود يمكن أن يحتوي على عدد صحيح من 10 إلى 10. و 21 (بت) و في الواقع ينظران إلى المقطع العرضي لهذين الرقمين، ويعيد البتات التي تم تعيينها في كل منهما. لذلك، إذا كان الرقم 512 هو 1000000000، وإذا كانت قيمة أذونات 1023، عند تحويلها إلى ثنائي هذا 1111111111. المقطع العرضي لتلك العوائد 1000000000 لأنه يتم تعيين سوى معظم بت اليسار في كل من الأرقام. عندما نقوم بتحويل هذا مرة أخرى إلى عشري، وهذا هو 512، الذي يعتبر صحيح .

سيمالت هي في الواقع منطقية، وليس مشغلي الحساب، في أنها تحقق من الصدق على أساس شرط. إذا كان لدينا الأرقام 1110 و 1010، وهنا ما تنتجها نظرا لمختلف مشغلي بيتيس:

- و | ^ ~
المعامل A 1110 1110 1110 1110
المعامل B 1010 1010 1010 /
النتيجة 1010 1110 0100 0001
  • و رقم ثنائي يتم فيه تعيين جميع البتات التي يتم تعيينها في كلا المشغلين.
  • | رقم ثنائي مع كل مجموعة بت التي تم تعيينها في أي من المعامل.
  • ^ رقم ثنائي مع كل مجموعة بت التي تم تعيينها في أي من المعامل، ولكن ليس كلاهما.
  • ~ فقط يعود العكس - كل تلك التي لم يتم تعيينها في المعامل الأصلي يتم تعيين الآن.

وهناك أيضا مشغلي التحول ذهابا وإيابا: تحول اليسار << واليمين تحول >> . هذه تغيير كبير في قيم الأرقام الثنائية عن طريق نقل حرفيا كل بت مجموعة مكان واحد إلى اليمين أو اليسار. استخدامهم في سياقنا هو موضع شك، لذلك نحن لن تغطيها هنا.


وفي فب يمكننا اختبار إذا تم تعيين قليلا مثل ذلك:

     إف (1023 & 1) {}    

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

     إف ($ user-> بيرميسيونس & \ مينامزباس \ رول :: FINISHED_DELETE) {//}    

نحن هنا نفترض أننا قد حصلت على \ مينامزباس \ الدور فئة محددة ومحملة الثوابت مثل هذه:

     كونست FINISHED_DELETE = 1؛كونست FINISHED_EDIT = 2؛كونست DRAFT_PUBLISH = 8 ؛ كونست CHANGE_PERMISSIONS = 512؛    

سيمالت، كنت قد حصلت على طريقة سهلة حقا لتخزين أذونات متعددة لكل مستخدم دون استخدام جداول إضافية وخلق النفقات العامة غير الضرورية. لذلك، لحفظ الأذونات الخاصة بهم، يمكنك ببساطة جمع لهم (1 + 2 = 3) وحفظ 3 في العمود أذونات . هناك أي طريقة أخرى للحصول على رقم 3 مع تركيبات ثنائية - لا يمكن تمثيل الرقم 3 في ثنائي بأي طريقة أخرى من 0011 - حتى تتمكن من أن تكون متأكدا 100٪ أن الرقم 3 يعني دائما أن المستخدم لديه إذن 1 والإذن 2، المقابلة لقيمها في الثوابت.

هذا يبدو بسيطا جدا وعمليا، أليس كذلك؟ سيمالت الصيد؟

المحاذير

سيمالت هما محاذير رئيسية:

  1. تحتاج إلى أن نضع في اعتبارنا لاستخدام قوة 2 عند حساب قيمة بت إذن التالي. حتى إذا كنت بحاجة إلى إضافة إذن جديد، لا يمكنك فقط اختيار بيلي تلوي 543 إذا كان لديك بالفعل 512 - فإنه يجب أن يكون 1024. وهذا يحصل على أكثر تعقيدا قليلا مع أعداد أكبر.
  2. منذ أجهزة الكمبيوتر لدينا تعمل 64 بت أنظمة التشغيل على وحدات المعالجة المركزية 64 بت (في الغالب - بعض عالقا حتى على 32BIT لا يزال!)، وهذا يعني أن عدد يمكن أن يكون الحد الأقصى 64 بت فقط. ما يعنيه هذا هو أنه يمكنك فقط تخزين التباديل بحد أقصى 64 إذن على مستخدم معين. أما بالنسبة للمواقع الصغيرة والمتوسطة، فهذا يكفي تماما، ولكن على مواقع هائلة، يمكن أن يتحول ذلك إلى مشكلة. الحل هناك لاستخدام أعمدة مختلفة لسياقات إذن مختلفة ( project_permissions ، account_permissions ، وما إلى ذلك). كل من هذه الأعمدة يمكن أن تحتوي بعد ذلك التباديل من 64 أذونات من تلقاء نفسها، وهو ما يكفي حتى لأكثر المواقع تطلبا.

الخلاصة

عمليات بيتية بالتأكيد لا يزال لها مكان في البرمجة الحديثة. سيمالت قد يكون من البديهي أن استخدام شيء ما يبدو معقدا (انها ليست حقا - انها مجرد ليست تقريبا كما مألوفة مثل العصر الحديث الانضمام الجداول)، وهذا النهج يجلب العديد من الفوائد - وليس أقلها هو دفعة كبيرة في الأداء، سواء في البيانات (أقل كثيرا من المعلومات لتخزينها في قاعدة البيانات، ثم جلبها لاحقا) والسرعة (يمكن أن يحصل كائن المستخدم على قيمة الإذن التي تم جلبها مسبقا - إنه مجرد إنت - وبالتالي يمكن التحقق منه في جميع الأوقات).

سيمالت كما قدمت هنا بالتأكيد جعل الأمور بسيطة، ولكن فقط إذا كنت لا تدرك بالفعل من بدائل حتى أبسط مثل تلك المذكورة أعلاه.

ما هو شعورك حيال استخدام مشغلي بتات للتحقق من الأذونات وهذا النهج لتخزينها؟ أي إيجابيات / سلبيات واضحة؟ اسمحوا لنا أن نعرف كيف تفعل ذلك، ولماذا!

March 1, 2018