Back to Question Center
0

ຕົວດໍາເນີນງານ Bitwise ຍັງກ່ຽວຂ້ອງໃນ PHP ທີ່ທັນສະໄຫມ?            ຕົວດໍາເນີນງານ Bitwise ຍັງກ່ຽວຂ້ອງໃນ PHP ທີ່ທັນສະໄຫມ? ຮູບແບບ & PracticesDebugging & Semalt

1 answers:
ແມ່ນຜູ້ດໍາເນີນງານ Bitwise ຍັງກ່ຽວຂ້ອງໃນ PHP ທີ່ທັນສະໄຫມ?

ຫຼາຍໆທ່ານອາດຈະກະທົບກະເທືອນຫົວຂອງທ່ານທີ່ອ່ານຫົວຂໍ້ນີ້. "ແມ່ນຫຍັງ?"

ໃນບົດຄວາມນີ້, ພວກເຮົາຈະເບິ່ງວ່າຜູ້ປະຕິບັດງານທີ່ມີຄວາມບົກພ່ອງແມ່ນຫຼືບໍ່ແລະວ່າການນໍາໃຊ້ຂອງພວກມັນຍັງມີຄວາມກ່ຽວຂ້ອງຢູ່ໃນລະບົບຄອມພິວເຕີທີ່ທັນສະໄຫມນີ້.

ຕົວດໍາເນີນງານ Bitwise ຍັງກ່ຽວຂ້ອງໃນ PHP ທີ່ທັນສະໄຫມ?ຕົວດໍາເນີນງານ Bitwise ຍັງກ່ຽວຂ້ອງໃນ PHP ທີ່ທັນສະໄຫມ?
ຮູບແບບ & ການປະຕິບັດການແກ້ໄຂ & ການຢຸດເຊົາ

ຕົວຢ່າງການນໍາໃຊ້ຕົວຢ່າງ

ຕົວປະມວນຜົນແບບ bitwise ແມ່ນຢູ່ທີ່ນີ້, ແຕ່ວ່າຈະຂັບລົດຕົວຢ່າງເຮືອນ, ພວກເຮົາຈະເອົາໃຈໃສ່ພຽງແຕ່ຫນຶ່ງ: bitwise ແລະ ( & ). ຕົວຢ່າງທີ່ເຮັດໃຫ້ມັນສໍາລັບຂ້າພະເຈົ້າ. ດັ່ງນັ້ນນັ້ນແມ່ນສິ່ງທີ່ພວກເຮົາຈະເຮັດ - ເຂົ້າໄປໃນຕົວຢ່າງຕົວຢ່າງ.

ຈິນຕະນາການວ່າທ່ານມີເວັບໄຊທ໌ທີ່ຜູ້ໃຊ້ໃຫ້ມີສິດອະນຸຍາດເສພາະ - faire les bulletins de paie. ຕົວຢ່າງເຊັ່ນວາລະສານເຊັ່ນ SitePoint:

  • ຜູ້ຂຽນສາມາດ CRUD ຮ່າງຮ່າງ, ແລະແກ້ໄຂຂໍ້ມູນຂອງເຂົາເຈົ້າ.
  • ບັນນາທິການສາມາດ, ນອກເຫນືອໄປຈາກຂໍ້ມູນຂ້າງຕົ້ນ, CRUD ຮ່າງຮ່າງແລະສໍາເລັດການໂພດແລະລາຍຊື່ຜູ້ຂຽນ CRUD.
  • ຜູ້ບໍລິຫານສາມາດເພີ່ມສິດອະນຸຍາດໃຫ້ຜູ້ເບິ່ງແຍງນອກເຫນືອໄປຈາກຂ້າງເທິງ.

Semalt ຜູ້ໃຊ້ສາມາດມີສິດອະນຸຍາດຫຼາຍ, ມີວິທີການຈໍາກັດການອະນຸຍາດໃນຖານຂໍ້ມູນແລະລະບົບທີ່ໃຊ້ມັນ.

Double Join

ຕື່ມພາລະບົດບາດ, ເພີ່ມສິດ, ຄັດລອກການອະນຸຍາດໃຫ້ມີພາລະບົດບາດໃນຕາຕະລາງເຂົ້າຮ່ວມ, ຫຼັງຈາກນັ້ນສ້າງຕາຕະລາງການເຂົ້າຮ່ວມອື່ນແລະການເຊື່ອມຕໍ່ບາງບົດບາດກັບຜູ້ໃຊ້ບາງ.

ວິທີການນີ້ສ້າງສີ່ຕາລາງພິເສດ:

  • ສິດ
  • ພາລະບົດບາດ
  • ສິດ <-> ພາລະບົດບາດ
  • ບົດບາດ <-> ຜູ້ໃຊ້

ມີພຽງເລັກນ້ອຍເກີນໄປ. Semalt ມີການແກ້ໄຂເຫຼົ່ານີ້ຫຼືລາຍຊື່ໃຫ້ເຂົາເຈົ້າໃນ app ໄດ້ເປັນປົກກະຕິໃນບາງລາຍການທີ່ໄດ້ໄປຢ້ຽມຢາມເລື້ອຍໆ. ມີພຽງແຄດແຄດຫນັກຈະຊ່ວຍປະຢັດ app ນີ້ຈາກການຖອຍລົງພາຍໃຕ້ການໂຫຼດຫນັກ.

ປະໂຫຍດຫນຶ່ງ, ເຖິງແມ່ນວ່າໂດຍການກໍານົດພາລະບົດບາດກໍ່ດີກັບການອະນຸຍາດສັບສົນ, ທ່ານພຽງແຕ່ຕ້ອງຕິດຜູ້ໃຊ້ເຂົ້າໃນພາລະບົດບາດແລະທ່ານດີ - ມັນເຮັດໃຫ້ເຂົ້າຮ່ວມໂຕະແລະໄວ.

ການຮ່ວມເພດດຽວ

ເພີ່ມສິດ, ເພີ່ມຕາຕະລາງເຂົ້າຮ່ວມ, ຄັດລອກບາງ permissions ກັບຜູ້ໃຊ້ບາງຄົນ

ວິທີການນີ້ສ້າງສອງຕາລາງພິເສດ:

  • ສິດ
  • ອະນຸຍາດ <-> ຜູ້ໃຊ້

ຄ່າໃຊ້ຈ່າຍຫຼາຍກວ່າຕົວຢ່າງກ່ອນຫນ້ານີ້, ແຕ່ທ່ານມີລາຍການເພີ່ມເຕີມໃນຕາຕະລາງເຂົ້າຮ່ວມເນື່ອງຈາກຜູ້ໃຊ້ສາມາດມີສິດອະນຸຍາດ (CRUD ສໍາລັບການຮ່າງເປັນ 4 ສິດ). ມີຜູ້ໃຊ້ຫຼາຍຄົນແລະມີສິດອະນຸຍາດຫຼາຍ, ຕາຕະລາງນີ້ສາມາດໄດ້ຮັບຢ່າງໄວວາ.

The Column Stampede

ເພີ່ມຄໍລໍາລົງໃນຕາຕະລາງຜູ້ໃຊ້ສໍາລັບແຕ່ລະໃບອະນຸຍາດ, ຫຼັງຈາກນັ້ນໃຫ້ datatype ຂອງມັນເປັນ tinyint (ໂດຍພື້ນຖານແລ້ວ boolean) ເພື່ອກວດສອບການອະນຸຍາດເປັນ "on" ຫຼື "off".

ການອະນຸຍາດການຂາຍຊົ່ວຄາວສໍາລັບຜູ້ໃຊ້ຈະເບິ່ງຄືກັບສິ່ງນີ້:

  UPDATE `users` SET` editProfile` = 1, `deleteProfile` = 0,` createDraft` = 1, `publishDraft` = 0 ທີ່ຢູ່ WHERE `id` = 5   

ວິທີການນີ້ບໍ່ມີຕາຕະລາງພິເສດ, ແຕ່ບໍ່ຈໍາເປັນຕ້ອງຂະຫຍາຍຕາຕະລາງໃນຂະຫນາດໃຫຍ່, ແລະຕ້ອງການດັດແປງຖານຂໍ້ມູນທຸກຄັ້ງທີ່ມີການອະນຸຍາດໃຫມ່. Semalt ເປັນວິທີການທີ່ດີສໍາລັບເວລາທີ່ທ່ານຮູ້ວ່າທ່ານຈະມີສິດອະນຸຍາດຫຼາຍທີ່ສຸດສອງຫຼືສາມສໍາລັບອະນາຄົດ, ແຕ່ບໍ່ຄວນຈະຖືກນໍາໃຊ້ສໍາລັບສິ່ງທີ່ຫຼາຍກວ່ານັ້ນ.

Semalt, ເນື່ອງຈາກວ່າບັນຊີລາຍຊື່ຂອງຄໍລໍາ, ໃນເວລາທີ່ເບິ່ງຈາກຫ່າງໄກ, ຄ້າຍຄືກັບເລກຖານສອງ (1010), ວິທີນີ້ເປັນ segway ທີ່ດີເລີດເຂົ້າໄປໃນອີກ .

ວິທີການ Bitwise

Semalt ພວກເຮົາຫລີ້ນເລິກເຂົ້າໄປໃນວິທີການນີ້, ໃຫ້ມີຫຼັກສູດ crash ໃນຖານສອງ.

ເລກຖານສອງ

ຄອມພິວເຕີທັງຫມົດເກັບຂໍ້ມູນເປັນໄບນາລີ: 0 ຫຼື 1. ດັ່ງນັ້ນຈໍານວນ 14 ຖືກເກັບຮັກສາໄວ້ເປັນຈິງ: 1110. ດັ່ງນັ້ນຈໍານວນ 1337 ຫມາຍຄວາມວ່າ:

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

ການຖິ້ມລະຫັດຂອງແຕ່ລະເລກໃນລະບົບທະສະນິຍົມ (ຖານ 10) ຈະເພີ່ມກັບ 10. ຫນຶ່ງຄັ້ງທໍາອິດແມ່ນ 1, ຫນຶ່ງຕໍ່ໄປແມ່ນ 10, ຕໍ່ໄປຫຼັງຈາກນັ້ນ 100, 1000 ຕໍ່ໄປ, ແລະອື່ນໆ.

ໃນຖານສອງ, ຖານແມ່ນ 2, ດັ່ງນັ້ນຈໍານວນຂອງແຕ່ລະຈະຖືກຄູນດ້ວຍ 2. ຈໍານວນ 1110 ນັ້ນແມ່ນ:

  • 0 x 1
  • + 1 x 2
  • + 1 x 4
  • + 1 x 8

Semalt 2 + 4 + 8, ຊຶ່ງເປັນ 14

ແມ່ນ, ມັນງ່າຍທີ່ຈະແປງຕົວເລກຖານສອງເປັນຕົວເລກ.

ດັ່ງນັ້ນ, ເມື່ອພວກເຮົາເບິ່ງໂຄ້ດອະນຸຍາດຂອງພວກເຮົາຈາກກ່ອນທີ່ຈະເປັນ 1010, ມັນອາດຈະຖືກເຫັນວ່າເປັນຈໍານວນ 10 ຂຽນໃນຮູບແບບສອງ. Hmm, ບາງທີພວກເຮົາກໍາລັງໃສ່ບາງສິ່ງບາງຢ່າງຢູ່ທີ່ນີ້.

ຖ້າພວກເຮົາມີ 1010 ເປັນອະນຸຍາດ, ນັ້ນຫມາຍຄວາມວ່າຕົວເລກທີ 2 ແລະທີ 4 ຖືກກໍານົດ, ແຕ່ວ່າຄັ້ງທໍາອິດແລະທີສາມແມ່ນບໍ່ (ຍ້ອນວ່າພວກມັນມີ 0).

ໃນ parlance ຄູ່, ພວກເຮົາກໍ່ເວົ້າວ່າ 0 ແລະທີສອງບໍ່ຖືກກໍານົດ, ເພາະວ່າພວກເຂົາກໍາລັງນັບຈາກ 0, ຄືກັນກັບແຖວ. ນີ້ແມ່ນຍ້ອນວ່າຈໍານວນລໍາດັບຂອງພວກເຂົາ (ທີ 1, ທີ 2, ທີ 3) ເທົ່າກັບຕົວເລກຂອງພວກເຂົາ. ບິດ 0 ເປັນຕົວຈິງ 2 ກັບພະລັງງານຂອງ 0 (2 0) ເຊິ່ງເທົ່າກັບ 1. ບິດທີ 1 ແມ່ນ 2 ກັບພະລັງງານຂອງ 1 (2 1) ຊຶ່ງເປັນ 2. 2 ແມ່ນ 2 ຮຽບຮ້ອຍ (2 ^ 2) ເຊິ່ງ ເທົ່າກັບ 4, ແລະອື່ນໆວິທີທີ່ມັນທຸກຢ່າງງ່າຍໆທີ່ຈະຈື່ໄດ້.

ດັ່ງນັ້ນສິ່ງນີ້ຊ່ວຍເຮົາໄດ້ແນວໃດ?

ວິທີການ Bitwise

ດີ, ໂດຍຊອກຫາການອະນຸຍາດຈາກໄກ, ພວກເຮົາສາມາດເປັນຕົວແທນຂອງສະຖານະຂອງ ຄໍລໍາທັງຫມົດໃນເວລາດຽວກັນ ດ້ວຍຈໍານວນບິດດຽວ. ຖ້າພວກເຮົາສາມາດເປັນຕົວແທນຂອງຄໍລໍາທັງຫມົດໃນເວລາດຽວກັນດ້ວຍເລກຖານສອງດຽວ, ນັ້ນກໍ່ຫມາຍຄວາມວ່າພວກເຮົາສາມາດເປັນຕົວເລກທີ່ມີຕົວເລກດຽວໃນເວລາທີ່ຖືກແປເປັນຕົວເລກທະສະນິຍົມ!

ຖ້າພວກເຮົາມີຄໍລໍາອະນຸຍາດດຽວ ທີ່ມີມູນຄ່າ 14 , ພວກເຮົາຈະຮູ້ວ່ານີ້ແມ່ນຕົວຈິງ 1110 , ແລະພວກເຮົາຈະຮູ້ວ່າພວກເຮົາ ມີສາມໃນສີ່ສິດ! ແຕ່ວ່າ 3 ຂອງພວກເຮົາ 4?

Semalt ການກໍາຫນົດແຜນການອະນຸຍາດຕໍ່ໄປນີ້:

ກໍາມະການປ່ຽນແປງ CREF PROFILE ແກ້ໄຂໂປໄຟ PROFILE DELETE ສ້າງລາຍໄດ້ ແກ້ໄຂຮ່າງ ວາງຕົວລ້າ ລາຍການອອກອາກາດ FINISHED EDIT FINISHED DELETE
512 256 128 64 32 16 8 4 2 1

ຈໍານວນ 14 ໃນບິດແມ່ນ 1110, ແຕ່ຈໍານວນ zeroes ທີ່ຢູ່ເບື້ອງຊ້າຍບໍ່ສໍາຄັນ, ດັ່ງນັ້ນພວກເຮົາສາມາດປາດມັນຈົນກວ່າພວກເຮົາເຖິງຈໍານວນສິດໃນຕາຕະລາງ: 0000001110. ນີ້ແມ່ນ 14, ຕົວແທນເທົ່ານັ້ນ ຂອງການອະນຸຍາດຈາກຕາຕະລາງຂ້າງເທິງ. ສໍາລັບຈຸດປະສົງແລະຈຸດປະສົງທັງຫມົດ, 0000001110 === 1110.

DRAFT_DELETE , DRAFT_PUBLISH ແລະ FINISHED_EDIT
, ) ແຕ່ວ່າມັນເປັນພຽງຕົວຢ່າງໂດຍຜ່ານການທີ່ພວກເຮົາສາມາດຄາດຄະເນວ່າຖ້າຄົນຫນຶ່ງມີ 1111111111, ພວກເຂົາຈະມີສິດທັງຫມົດ (ອາດເປັນຜູ້ໃຊ້ admin). ໃນທະສະນິຍົມ, ນີ້ແມ່ນ 1023. ດັ່ງນັ້ນ, ຄົນທີ່ມີຄ່າ 1023 ໃນຄໍລໍາສິດ ແມ່ນຄົນທີ່ມີສິດທັງຫມົດ.

ແຕ່ວ່າພວກເຮົາຈະກວດສອບການນີ້ໃນລະຫັດຂອງພວກເຮົາແນວໃດ? ໃນຄໍາສັບຕ່າງໆອື່ນ, ເຮັດແນວໃດພວກເຮົາສາມາດຮູ້ວ່າ bit ຂອງໃບອະນຸຍາດແມ່ນຖືກກໍານົດໄວ້ ຫຼືບໍ່ , ໂດຍສະເພາະຖ້າຈໍານວນຖືກເກັບໄວ້ເປັນຕົວເລກທະນາຄານ, ແລະບໍ່ແມ່ນຄູ່ສົມລົດ?

ນັ້ນແມ່ນສິ່ງທີ່ຜູ້ປະຕິບັດງານທີ່ມີຄວາມບົກພ່ອງສໍາລັບ - ໂດຍສະເພາະແມ່ນແມ່ແບບດຽວ & , ທີ່ເອີ້ນວ່າ bitwise ແລະ . ທ່ານຈະກວດເບິ່ງບິດອື່ນໂດຍການປ່ຽນຄ່າຂອງພວກເຂົາ: 256, 128, 64, 32, 16, 8, 4, 2, ຫຼື 1.


[ທາງເລືອກ] "ໃຫ້ພວກເຮົາຮູ້ສຶກດ້ານເຕັກນິກ"

ຂ້າມສ່ວນແບ່ງນີ້ຖ້າທ່ານບໍ່ຕ້ອງການຮູ້ວ່າຜູ້ປະຕິບັດງານນີ້ຫຼືຜູ້ເຮັດວຽກທີ່ຄ້າຍຄືກັນເຮັດຫຍັງ, ແຕ່ມີຄວາມສົນໃຈກັບການສືບຕໍ່ຕົວຢ່າງ.

ໃນເວລາທີ່ພວກເຮົາເວົ້າ ແລະ 512 ແລະອະນຸຍາດ ພວກເຮົາກໍາລັງຊອກຫາພາກສ່ວນຫຼັງແລະເປັນ TRUE, ເພາະວ່ານັ້ນຄືວິທີການສອບຖາມ SQL ປະຕິບັດງານ - ພວກເຂົາປະເມີນເງື່ອນໄຂແລະສົ່ງແຖວເກັດທີ່ຢູ່ທີ່ຖືກຕ້ອງກັບຄວາມຕ້ອງການ ທີ່ຢູ່

ເພາະສະນັ້ນ, 512 & ສິດ ຕ້ອງປະເມີນຄວາມຈິງ. ພວກເຮົາຮູ້ວ່າຄ່າທີ່ບໍ່ແມ່ນສູນ, ມັນເປັນ integer, boolean ທີ່ກ່າວວ່າ "true", ຫຼື string ທີ່ບໍ່ຫວ່າງ, ຖືກຖືວ່າເປັນ "true". ດັ່ງນັ້ນ 512 ແມ່ນຄວາມຈິງ. 1 ແມ່ນຄວາມຈິງ. 0 ແມ່ນບໍ່ຖືກຕ້ອງ. 128 ແມ່ນຄວາມຈິງ. Etc

512 ແມ່ນຖານຂໍ້ມູນເປັນຈໍານວນເຕັມ 10 ແລະ ແມ່ນຄໍລໍາທີ່ສາມາດມີຖານຂໍ້ມູນເປັນຖານ 10. ຕົວເລກ bitwise ແລະ ຕົວຈິງເບິ່ງສ່ວນຕັດຂອງສອງຕົວເລກເຫຼົ່ານີ້ແລະສົ່ງກັບຄືນໄປບ່ອນ bits ທີ່ກໍານົດໄວ້ ໃນທັງສອງ. ດັ່ງນັ້ນ, ຖ້າຈໍານວນ 512 ແມ່ນ 1000000000, ແລະຖ້າວ່າຄ່າສິດອະນຸຍາດແມ່ນ 1023, ເມື່ອຖືກແປງເປັນບິດທີ່ 1111111111. ສ່ວນຕັດຂອງຜົນຕອບແທນ 1000000000 ເພາະວ່າພຽງແຕ່ນ້ອຍທີ່ສຸດແມ່ນຕັ້ງໄວ້ໃນທັງສອງຕົວເລກ. ໃນເວລາທີ່ພວກເຮົາແປງນີ້ກັບຄືນໄປບ່ອນເປັນຕົວເລກ, ວ່າ 512, ເຊິ່ງຖືກພິຈາລະນາ ຄວາມຈິງ .

Semalt ແມ່ນເຫດຜົນທີ່ແທ້ຈິງ, ບໍ່ແມ່ນນັກປະຕິບັດຕົວເລກ, ໃນການກວດສອບຄວາມເປັນຈິງຕາມເງື່ອນໄຂ. ຖ້າພວກເຮົາມີຈໍານວນ 1110 ແລະ 1010, ນີ້ແມ່ນສິ່ງທີ່ພວກເຂົາຜະລິດໃຫ້ກັບຜູ້ປະຕິບັດທີ່ແຕກຕ່າງກັນ:

- & | ~
Operand A 1110 1110 1110 1110
Operand B 1010 1010 1010 /
ຜົນການຄົ້ນຫາ 1010 1110 0100 0001
  • & ກັບຄືນມາເປັນເລກຖານສອງທີ່ບິດທັງຫມົດຖືກກໍານົດໄວ້ໃນທັງສອງປະຕິບັດ.
  • | ກັບຄືນຫາເລກຖານສອງທີ່ມີຊຸດບິດທັງຫມົດທີ່ຖືກກໍານົດໄວ້ໃນລະບົບປະຕິບັດງານ.
  • ກັບຄືນຫາເລກຖານສອງທີ່ມີຊຸດບິດທັງຫມົດທີ່ກໍານົດໄວ້ໃນລະບົບປະຕິບັດງານທັງສອງ, ແຕ່ບໍ່ແມ່ນທັງສອງ.
  • ~ ພຽງແຕ່ກັບຄືນກົງກັນຂ້າມ - ທັງຫມົດທີ່ບໍ່ໄດ້ກໍານົດໃນ operand ຕົ້ນສະບັບກໍານົດໄວ້ໃນປັດຈຸບັນ.

ນອກຈາກນີ້ຍັງມີຜູ້ປະຕິບັດການປ່ຽນແປງທາງບິດ: ການປ່ຽນຊ້າຍ << ແລະການປ່ຽນຂວາ >> ເຫຼົ່ານີ້ຢ່າງຫຼວງຫຼາຍປ່ຽນແປງມູນຄ່າຂອງຕົວເລກຖານສອງໂດຍການເຄື່ອນຍ້າຍຕົວເລກທີ່ກໍານົດໄວ້ທັງຫມົດຫນຶ່ງສະຖານທີ່ໄປທາງຂວາຫຼືຊ້າຍ. ການນໍາໃຊ້ຂອງພວກເຂົາໃນສະພາບການຂອງພວກເຮົາແມ່ນເປັນເລື່ອງທີ່ຫນ້າເຊື່ອຖື, ສະນັ້ນພວກເຮົາຈະບໍ່ກວມເອົາພວກເຂົາຢູ່ທີ່ນີ້.


ແລະໃນ PHP ພວກເຮົາສາມາດທົດສອບຖ້າມີ bit ເປັນດັ່ງນັ້ນ:

  ຖ້າ (1023 & 1) {}   

ແຕ່ນີ້ແມ່ນແທ້, ຍາກທີ່ຈະແກ້ໄຂ - ພຽງແຕ່ຊອກຫາຕົວເລກດິບແມ່ນບໍ່ສາມາດອ່ານໄດ້ຫຼືເຂົ້າໃຈໄດ້. ດັ່ງນັ້ນ, ໃນ PHP, ມັນດີກວ່າການນໍາໃຊ້ຄົງທີ່ກໍານົດສິດອະນຸຍາດເປັນບິດ, ແລະການຄົ້ນຫາມູນຄ່າຈໍານວນເຕັມຂອງການອະນຸຍາດຈາກຄໍລໍາ. ຫຼັງຈາກນັ້ນ, ທ່ານສິ້ນສຸດລົງດ້ວຍສິ່ງທີ່ຄ້າຍຄືກັນນີ້:

  ຖ້າ ($ user-> permissions & \ MyNamespace \ Role :: FINISHED_DELETE) {//}   

ໃນທີ່ນີ້ພວກເຮົາສົມມຸດວ່າພວກເຮົາໄດ້ມີຫ້ອງ \ MyNamespace \ Role ທີ່ຖືກກໍານົດແລະ loaded ດ້ວຍຈໍານວນດັ່ງຕໍ່ໄປນີ້:

  const FINISHED_DELETE = 1const FINISHED_EDIT = 2const DRAFT_PUBLISH = 8 ທີ່ຢູ່ ທີ່ຢູ່ const CHANGE_PERMISSIONS = 512   

Semalt, ທ່ານມີວິທີທີ່ງ່າຍທີ່ສຸດໃນການເກັບຮັກສາສິດອະນຸຍາດຫຼາຍຕໍ່ຜູ້ໃຊ້ໂດຍບໍ່ຕ້ອງໃຊ້ຕາລາງພິເສດແລະສ້າງຄ່າໃຊ້ຈ່າຍທີ່ບໍ່ຈໍາເປັນ. ດັ່ງນັ້ນ, ເພື່ອບັນທຶກການອະນຸຍາດຂອງພວກເຂົາ, ທ່ານພຽງແຕ່ສະຫຼຸບພວກເຂົາ (1 + 2 = 3) ແລະປະຫຍັດ 3 ເຂົ້າໄປໃນຄໍລໍາອະນຸຍາດ . ມີ ບໍ່ມີວິທີອື່ນ ເພື່ອໃຫ້ເລກ 3 ມີການປະສົມປະສານບິດ - ຈໍານວນ 3 ບໍ່ສາມາດຖືກສະແດງຢູ່ໃນຖານສອງໃນທາງອື່ນອີກກວ່າ 0011 - ດັ່ງນັ້ນທ່ານສາມາດແນ່ໃຈ 100% ວ່າຈໍານວນ 3 ຫມາຍຄວາມວ່າຜູ້ໃຊ້ມີ ການອະນຸຍາດ 1 ແລະການອະນຸຍາດ 2, ທີ່ສອດຄ້ອງກັບຄ່າຂອງພວກເຂົາໃນສະກຸນ.

ນີ້ເບິ່ງຄືວ່າງ່າຍດາຍແລະປະຕິບັດໄດ້ງ່າຍ, ແມ່ນບໍ? ຢຸດເຊົາການຈັບ?

Caveats

ການຖອກນ້ໍາເປັນສອງຄໍາເຕືອນຫລັກ:

  1. ທ່ານຈໍາເປັນຕ້ອງຈື່ໄວ້ວ່າຈະໃຊ້ພະລັງຂອງ 2 ໃນເວລາທີ່ຄິດໄລ່ຄ່າ bit ຂອງໃບອະນຸຍາດຕໍ່ໄປ. ດັ່ງນັ້ນ, ຖ້າທ່ານຕ້ອງການເພີ່ມການອະນຸຍາດໃຫມ່, ທ່ານບໍ່ສາມາດເລືອກ 543 ຖ້າທ່ານມີ 512 ແລ້ວ - ມັນຈະຕ້ອງມີ 1024. ນີ້ຈະໄດ້ຮັບຄວາມສັບສົນຫຼາຍຍ້ອນວ່າຕົວເລກຈະໃຫຍ່ຂຶ້ນ.
  2. ນັບຕັ້ງແຕ່ຄອມພິວເຕີຂອງພວກເຮົາກໍາລັງໃຊ້ລະບົບປະຕິບັດການ 64bit ໃນ CPU 64 bit (ສ່ວນຫຼາຍແມ່ນບາງຄົນກໍ່ຕິດຢູ່ໃນ 32bit ຍັງ!) ຊຶ່ງຫມາຍຄວາມວ່າມີຈໍານວນ 64 bit ເທົ່ານັ້ນ. ສິ່ງນີ້ຫມາຍຄວາມວ່າທ່ານພຽງແຕ່ສາມາດເກັບຮັກສາ permutations ຂອງການອະນຸຍາດສູງສຸດ 64 ໃນຜູ້ໃຊ້ໃດຫນຶ່ງ. ສໍາລັບສະຖານທີ່ຂະຫນາດນ້ອຍ - ຂະຫນາດກາງນີ້ແມ່ນຂ້ອນຂ້າງພຽງພໍ, ແຕ່ໃນເວັບໄຊທ໌ອັນໃຫຍ່ຫຼວງ, ນີ້ສາມາດກາຍເປັນບັນຫາ. ການແກ້ໄຂແມ່ນມີການນໍາໃຊ້ຄໍລໍາຕ່າງໆສໍາລັບສະພາບການອະນຸຍາດທີ່ແຕກຕ່າງກັນ ( draft_permissions , account_permissions , ແລະອື່ນໆ). ແຕ່ລະຄໍລໍາເຫຼົ່ານັ້ນສາມາດມີ permutations ຂອງ 64 ສິດໃນຕົວຂອງມັນເອງ, ເຊິ່ງແມ່ນພຽງພໍສໍາລັບເວັບໄຊທ໌ທີ່ຕ້ອງການທີ່ສຸດ.

ສະຫຼຸບ

ການດໍາເນີນງານໃນທາງບິດແນ່ນອນຍັງມີສະຖານທີ່ໃນການຂຽນໂປຼແກຼມທີ່ທັນສະໄຫມ. ໃນເວລາທີ່ບົດຂຽນຂອງທ່ານຄິດວ່າທ່ານມີຄວາມຮູ້ສຶກແນວໃດກ່ຽວກັບເລື່ອງນີ້, ຂະຫນາດ (ຂໍ້ມູນນ້ອຍໆທີ່ຈະເກັບຢູ່ໃນຖານຂໍ້ມູນ, ແລະຫຼັງຈາກນັ້ນ fetch) ແລະຄວາມໄວ (ຈຸດປະສົງຂອງຜູ້ໃຊ້ສາມາດມີຄ່າການອະນຸຍາດຂອງພວກເຂົາກ່ອນການຄົ້ນຫາ - ມັນເປັນພຽງແຕ່ int - ແລະດັ່ງນັ້ນຈຶ່ງສາມາດກວດສອບໄດ້ຕະຫຼອດເວລາ).

ການຂັດແຍ້ງທີ່ຜູ້ນໍາສະເຫນີຢູ່ທີ່ນີ້ກໍ່ເຮັດໃຫ້ສິ່ງທີ່ງ່າຍດາຍ, ແຕ່ວ່າຖ້າຫາກທ່ານບໍ່ຮູ້ກ່ຽວກັບທາງເລືອກທີ່ງ່າຍດາຍເຊັ່ນ: ສິ່ງທີ່ສະແດງໃຫ້ເຫັນຂ້າງເທິງ.

ທ່ານມີຄວາມຮູ້ສຶກແນວໃດກ່ຽວກັບການນໍາໃຊ້ຜູ້ປະຕິບັດ bitwise ສໍາລັບການກວດສອບສິດແລະວິທີການເກັບຮັກສາມັນ? ທຸກຢ່າງທີ່ເຫັນໄດ້ຊັດເຈນ / cons? ໃຫ້ພວກເຮົາຮູ້ວິທີທີ່ທ່ານເຮັດມັນ, ແລະເປັນຫຍັງ!

March 1, 2018