به غیر از روالهای دستی که میتوان با استفاده از برنامهنویسی برای کنترل دسترسی دادهها در اودوو (odoo) ایجاد نمود، اودوو دو مکانیزم داده محور برای مدیریت دسترسی به دادهها فراهم کرده است. هر دو مکانیزم با استفاده از گروهها دسترسی را به کاربران مرتبط میسازد: به اینصورت که کاربر میتواند عضو هر تعداد گروه باشد، دسترسیها هم به گروهها تخصیص مییابد و کاربران این دسترسیها را از طریق گروههایی که عضو هستند به دست میآورند.
Access Control
از طریق رکوردهای ir.model.access دسترسی به مدلها (در اودوو هر موجودیت با یک مدل تعریف میشود به طور مثال برای نگهداری اطلاعات کارمندان مدلی به نام کارمند یا employee تعریف میشود و این مدلها در بانک اطلاعاتی تبدیل به جداول میشوند) مدیریت میشود. در واقع این مکانیزم جهت فراهم کردن کنترل دسترسی در سطح یک مدل (یا موجودیت) است برای واضحتر شدن همان مثال مدل کارمند را در نظر بگیریم: با Access Control، ما میتوانیم به افراد دسترسی مشاهده کارمندان را بدهیم. در این صورت، کاربری که دسترسی مشاهده (خواندن اطلاعات) روی مدل کارمند را دارد، میتواند اطلاعات همه کارمندان را مشاهده نماید. (در ادامه در مکانیزم دوم، کنترل دسترسی بر روی رکوردهای جداول تشریح خواهد شد).
این دسترسی به صورت افزایشی است، یعنی اگر کاربر عضو چند گروه باشد، دسترسیهای مختلف دریافتی از طریق هر گروه به دسترسیهای قبلی اضافه میشود. به طور مثال اگر شخص عضو گروه a , b بوده و گروه a دسترسی مشاهده کارمندان را داشته باشد، این کاربر دسترسی مشاهده را دریافت خواهد کرد. حال اگر دسترسی ایجاد کارمند را به گروه b بدهیم با توجه به عضویت کاربر در گروه b این دسترسی نیز به دسترسی قبلی کاربر اضافه میشود و کاربر میتواند اطلاعات کارمندان را مشاهده و همچنین کاربر جدید ایجاد نماید.
بهتر است دقت شود، در صورتی که هیچ گروه دسترسی در مدل تعریف نشود، همه کاربران به مدل دسترسی خواهند داشت. ولی در صورتی که گروه دسترسی تعریف شده باشد، فقط دسترسی به اعضای گروههای تعریف شده اعطا خواهد شد.
دسترسیهای قابل تعریف برای هر گروه عبارتند از: ایجاد (perm_create)، جستجو و مشاهده (perm_read)، تغییر و بروزآوری اطلاعات موجود (perm_write) و حذف رکورد (perm_unlink).
Record Rules
یکی دیگر از مکانیزمهای بسیار کارآمد اودوو (odoo) برای پیاده سازی امنیت، قوانین رکورد میباشد. این قوانین در واقع شرایطی هستند که توسط سیستم بر روی رکوردها اعمال و امکان دسترسی (ایجاد، مشاهده، ویرایش و حذف) را فقط روی رکوردهایی که در این شرایط قرار بگیرند به کاربر می دهند.
یک قانون رکورد (record rule) شامل موارد زیر است:
یک مدل (موجودیت یا جدول اطلاعاتی) که باید بر روی آن اعمال شود.
مجموعهای از دسترسیها که میخواهیم اعمال شود (به طور مثال وقتی دسترسی خواندن یا مشاهده (perm_read) تنظیم شود، قانون تعریف شده فقط در هنگام خواندن یا مشاهده اطلاعات اعمال خواهد شد).
مجموعهای از گروههای کاربری که میخواهیم این قانون برای آنها اعمال شود. در صورتی که گروهی تعریف نشود، این دسترسی سراسری (global) بوده و برای همه کاربران اعمال خواهد شد.
یک دامنه (domain) که برای چک کردن شامل شدن یا نشدن قانون اعمال شده بر روی رکورد استفاده میشود. در این دامنه میتوان از دو متغیر سیستمی کاربر (user) که شامل رکورد اطلاعاتی کاربر جاری است و زمان (time) برای ایجاد شرایط پویاتر استفاده کرد.
اما نکته بسیار کلیدی و حیاتی در تعریف قوانین توجه به گروهی یا سراسری بودن قانون است. قوانینی که روی گروه کاربران تعریف شده با قوانینی که به صورت سراسری تعریف شدهاند، کاربرد کاملا متفاوتی دارند:
قوانین سراسری نسبت به همدیگر حالت کاهنده دارند. یعنی تمام قوانین سراسری بر روی یک رکورد باید تطابق داشته باشند، تا آن رکورد قابل دسترس باشد.
قوانین گروه کاربری اما نسبت به یکدیگر حالت افزاینده دارند. یعنی اگر حداقل یکی از قوانین گروههای کاری با رکورد مد نظر تطابق داشته باشد، رکورد قابل دسترس است. دقت شود که حداقل یک قانون و در صورت تطابق بیش از یک قانون هم دسترسی برقرار است.
این بدان معنی است که اولین قانون گروهی دسترسی را محدود کرده و قوانین گروهی بعدی میتوانند باعث افزایش دسترسی کاربر شوند، این در حالی است که قوانین سراسری فقط منجر به محدودیت بیشتر و کاهش دسترسیهای کاربر خواند شد.
توجه داشته باشید که هیچ قانونی برای کاربر administrator اعمال نخواهد شد.
Field Access
یکی دیگر از مکانیزمها که از نسخه ۷ به بعد اضافه شده است، امکان کنترل دسترسی بر روی فیلدهای اطلاعاتی است. این مکانیزم از طریق برنامهنویسی و با اضافه کردن گروهها به تعریف فیلد در مدل مربوط فقط کاربران گروههای ذکر شده امکان دسترسی به فیلد مربوطه را خواهند داشت.