برنامه نویسی

آیا شما واقعاً مجوز را درک می کنید؟

Summarize this content to 400 words in Persian Lang تقریباً هر برنامه وب دارای مجوز است، و کتابخانه های بسیار متفاوتی وجود دارد. چگونه مورد مناسب را انتخاب می کنید؟ شما در حال کشف کردن هستید.

اساساً، مجوز یک بازی تطبیقی ​​برای تعیین اینکه آیا برخی از بازیگران مجاز به دسترسی به برخی منابع هستند یا خیر. راه های زیادی برای پوست گربه وجود دارد، اما همه آنها از قوانین پیروی می کنند. قوانین من اینجاست:

احراز هویت مستلزم مجوز است. الگوی شی تهی دوست شما در اینجا است. شما کاملا می توانید یک Guest یا Anonymous کاربر بدون دسترسی به چیزی هیچ دلیلی برای رفتار متفاوت با کاربران غیرمجاز در کنار پشتیبانی از زبان مادری وجود ندارد nil.
سیستم های مجوز از هر دو منظر نوشته می شوند: کاربر یا منبع.
هر کد مجوز پیچیده دلخواه می تواند بر اساس 5 مفهوم زیر ساخته شود:

کاربران (شما، مشتری، سیستم خارجی)
گروه ها (این مجموعه ای از کاربران است)
مجوزها (CRUD+، CRUD استاندارد به علاوه هر چیزی)
نقش ها (این مجموعه ای از مجوزها است)
منبع (هر چیزی! رکورد، روش، شی و غیره)

در این چارچوب ذهنی، گروه‌ها فقط مجموعه‌ای از کاربران هستند و می‌توانند به صورت بازگشتی تعریف شوند. یک گروه می تواند درختی از گروه ها باشد. نقش ها هم همینطور.
A Role که مجموعه ای از مجوزها است در ابتدا کمی دردسرساز بود، اما کمی در مورد آن فکر کنید و متوجه خواهید شد که درست است. تعداد کمی از کتابخانه ها وجود دارند که به جای مجوز از نقش استفاده می کنند، پس مراقب باشید.

اکنون شما یک چارچوب ذهنی قوی برای بررسی سریع گزینه های مجوز بر اساس مبادلاتی که توسط هر کتابخانه خاصی انجام می شود، دارید. من هنوز هیچ کتابخانه مجوزی ندیده ام که همه آنها را همزمان پشتیبانی کند.

بیایید چند جواهر یاقوتی محبوب را مرور کنیم و با استفاده از این چارچوب، مبادلات را خواهیم دید

CanCanCan
پوند
آپارتمان
به عنوان_ مستاجر عمل می کند

CanCanCan

بیایید نگاه کنیم cancan/cancancan، یک جواهر محبوب که در اصل توسط رایان بیتس بدنام ایجاد شد.

مستقیماً از README:

class Ability
include CanCan::Ability

def initialize(user)
can :read, Post, public: true

return unless user.present? # additional permissions for logged in users (they can read their own posts)
can :read, Post, user: user

return unless user.admin? # additional permissions for administrators
can :read, Post
end
end

در مثال کوتاه می توانید فوراً معاوضه ها را مشاهده کنید.

کاربران
گروه ها
مجوزها
نقش ها
منبع
قابل ممیزی
پیچیدگی







پایین

CanCanCan از کاربران، مجوزها و منابع پشتیبانی می کند، پشتیبانی محدود برای پشتیبانی حسابرسی، منحنی یادگیری کم عمق، دسترسی بسته ناموفق از طریق load_and_authorize_resource

CanCanCan از “دیدگاه” کاربر کار می کند.

گروه‌های پشتیبانی از کاربران یا نقش‌ها به توسعه‌دهنده واگذار می‌شود.

پوند

کاربران
گروه ها
مجوزها
نقش ها
منبع
قابل ممیزی
پیچیدگی







متوسط

Pundit از دیدگاه منبع از طریق سیاست ها کار می کند.

از طریق خط مشی ها، Pundit از منابع، کاربران، حسابرسی، کمی پیچیده، مجوزها، بسته نشدن از طریق پشتیبانی می کند after_action :verify_authorized

گروه‌های پشتیبانی از کاربران یا نقش‌ها به توسعه‌دهنده واگذار می‌شود.

آپارتمان

کاربران
گروه ها
مجوزها
نقش ها
منبع
قابل ممیزی
پیچیدگی







بالا

تبلیغ شده به عنوان “Multitancy for Rails and ActiveRecord” به این معنی است که از گروه ها پشتیبانی می کند. این کار را از طریق پایگاه داده replication/sharding/schema_search_path انجام می دهد.

این طراحی به این معنی است که از کاربران، گروه ها و منابع پشتیبانی می کند و به طور پیش پا افتاده قابل بازرسی است. باز کردن/بستن شکست به نحوه مدیریت اتصالات پایگاه داده/مسیر جستجوی شما بستگی دارد و منحنی یادگیری و بار تعمیر و نگهداری بسیار بالایی دارد.

از مجوزها، نقش ها پشتیبانی نمی کند.

به عنوان_مستاجر عمل می کند

کاربران
گروه ها
مجوزها
نقش ها
منبع
قابل ممیزی
پیچیدگی







پایین

این جواهر از ActiveRecord استفاده می کند default_scope برای فیلتر کردن رکوردها بر اساس گروه. این یک راه حل بسیار زیبا است، حتی اگر مجوزها و نقش ها را حل نمی کند.

جواهرات مختلف دیگری بر اساس مجوز وجود دارد که دارای مبادلات مشابهی هستند. (اسپویلر: آنها هرگز از گروه ها حمایت نمی کنند)

اگر جواهری وجود داشت که همه آن را پشتیبانی می کرد:

استفاده بی اهمیت
گروه ها
کاربران
نقش ها
مجوزها
بی اهمیت به حسابرسی
طراحی بسته با شکست
می تواند از دیدگاه یک کاربر یا منبع کار کند

آن گوهر هنوز وجود ندارد.

تقریباً هر برنامه وب دارای مجوز است، و کتابخانه های بسیار متفاوتی وجود دارد. چگونه مورد مناسب را انتخاب می کنید؟ شما در حال کشف کردن هستید.

اساساً، مجوز یک بازی تطبیقی ​​برای تعیین اینکه آیا برخی از بازیگران مجاز به دسترسی به برخی منابع هستند یا خیر. راه های زیادی برای پوست گربه وجود دارد، اما همه آنها از قوانین پیروی می کنند. قوانین من اینجاست:

  • احراز هویت مستلزم مجوز است. الگوی شی تهی دوست شما در اینجا است. شما کاملا می توانید یک Guest یا Anonymous کاربر بدون دسترسی به چیزی هیچ دلیلی برای رفتار متفاوت با کاربران غیرمجاز در کنار پشتیبانی از زبان مادری وجود ندارد nil.

  • سیستم های مجوز از هر دو منظر نوشته می شوند: کاربر یا منبع.

  • هر کد مجوز پیچیده دلخواه می تواند بر اساس 5 مفهوم زیر ساخته شود:

  1. کاربران (شما، مشتری، سیستم خارجی)
  2. گروه ها (این مجموعه ای از کاربران است)
  3. مجوزها (CRUD+، CRUD استاندارد به علاوه هر چیزی)
  4. نقش ها (این مجموعه ای از مجوزها است)
  5. منبع (هر چیزی! رکورد، روش، شی و غیره)

در این چارچوب ذهنی، گروه‌ها فقط مجموعه‌ای از کاربران هستند و می‌توانند به صورت بازگشتی تعریف شوند. یک گروه می تواند درختی از گروه ها باشد. نقش ها هم همینطور.
A Role که مجموعه ای از مجوزها است در ابتدا کمی دردسرساز بود، اما کمی در مورد آن فکر کنید و متوجه خواهید شد که درست است. تعداد کمی از کتابخانه ها وجود دارند که به جای مجوز از نقش استفاده می کنند، پس مراقب باشید.

اکنون شما یک چارچوب ذهنی قوی برای بررسی سریع گزینه های مجوز بر اساس مبادلاتی که توسط هر کتابخانه خاصی انجام می شود، دارید. من هنوز هیچ کتابخانه مجوزی ندیده ام که همه آنها را همزمان پشتیبانی کند.

بیایید چند جواهر یاقوتی محبوب را مرور کنیم و با استفاده از این چارچوب، مبادلات را خواهیم دید

  1. CanCanCan
  2. پوند
  3. آپارتمان
  4. به عنوان_ مستاجر عمل می کند

CanCanCan

بیایید نگاه کنیم cancan/cancancan، یک جواهر محبوب که در اصل توسط رایان بیتس بدنام ایجاد شد.

مستقیماً از README:

class Ability
  include CanCan::Ability

  def initialize(user)
    can :read, Post, public: true

    return unless user.present?  # additional permissions for logged in users (they can read their own posts)
    can :read, Post, user: user

    return unless user.admin?  # additional permissions for administrators
    can :read, Post
  end
end

در مثال کوتاه می توانید فوراً معاوضه ها را مشاهده کنید.

کاربران گروه ها مجوزها نقش ها منبع قابل ممیزی پیچیدگی
پایین

CanCanCan از کاربران، مجوزها و منابع پشتیبانی می کند، پشتیبانی محدود برای پشتیبانی حسابرسی، منحنی یادگیری کم عمق، دسترسی بسته ناموفق از طریق load_and_authorize_resource

CanCanCan از “دیدگاه” کاربر کار می کند.

گروه‌های پشتیبانی از کاربران یا نقش‌ها به توسعه‌دهنده واگذار می‌شود.

پوند

کاربران گروه ها مجوزها نقش ها منبع قابل ممیزی پیچیدگی
متوسط

Pundit از دیدگاه منبع از طریق سیاست ها کار می کند.

از طریق خط مشی ها، Pundit از منابع، کاربران، حسابرسی، کمی پیچیده، مجوزها، بسته نشدن از طریق پشتیبانی می کند after_action :verify_authorized

گروه‌های پشتیبانی از کاربران یا نقش‌ها به توسعه‌دهنده واگذار می‌شود.

آپارتمان

کاربران گروه ها مجوزها نقش ها منبع قابل ممیزی پیچیدگی
بالا

تبلیغ شده به عنوان “Multitancy for Rails and ActiveRecord” به این معنی است که از گروه ها پشتیبانی می کند. این کار را از طریق پایگاه داده replication/sharding/schema_search_path انجام می دهد.

این طراحی به این معنی است که از کاربران، گروه ها و منابع پشتیبانی می کند و به طور پیش پا افتاده قابل بازرسی است. باز کردن/بستن شکست به نحوه مدیریت اتصالات پایگاه داده/مسیر جستجوی شما بستگی دارد و منحنی یادگیری و بار تعمیر و نگهداری بسیار بالایی دارد.

از مجوزها، نقش ها پشتیبانی نمی کند.

به عنوان_مستاجر عمل می کند

کاربران گروه ها مجوزها نقش ها منبع قابل ممیزی پیچیدگی
پایین

این جواهر از ActiveRecord استفاده می کند default_scope برای فیلتر کردن رکوردها بر اساس گروه. این یک راه حل بسیار زیبا است، حتی اگر مجوزها و نقش ها را حل نمی کند.

جواهرات مختلف دیگری بر اساس مجوز وجود دارد که دارای مبادلات مشابهی هستند. (اسپویلر: آنها هرگز از گروه ها حمایت نمی کنند)

اگر جواهری وجود داشت که همه آن را پشتیبانی می کرد:

  1. استفاده بی اهمیت
  2. گروه ها
  3. کاربران
  4. نقش ها
  5. مجوزها
  6. بی اهمیت به حسابرسی
  7. طراحی بسته با شکست
  8. می تواند از دیدگاه یک کاربر یا منبع کار کند

آن گوهر هنوز وجود ندارد.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا