Tập tành phân quyền trong module Drupal 9

7th May 2022
Table of contents

Bạn đang tìm cách tạo phân quyền cho module mới trong Drupal 8/ Drupal 9 ? Trong Drupal, các quyền hiện được xác định trong file MODULENAME.permissions.yml thay vì sử dụng hook_permission().

Drupal có hai loại quyền mà chúng ta có thể khai báo:

  1. - Tĩnh (Static) là các quyền không phụ thuộc vào bất kỳ thông tin nào trong hệ thống.
  2. - Động (Dynamic) là các quyền được tạo nhanh chóng và dành riêng cho hệ thống (ví dụ: quyền cho từng loại node, vai trò người dùng, v.v.).

Drupal 8/9 Static Permissions

Ta khai báo một phân quyền tĩnh (static) trong file MODULENAME.permissions.yml của module bạn muốn tạo phân quyền

Xem code bên dưới:

static permission 1:
  title: 'First level permission'
  description: 'Gives static permission 1 to the users.'

static permission 2:
  title: 'Second level permission'
  description: 'Gives static permission 2 to the users.'
  restrict access: true

Tùy chọn restrict access sẽ hiển thị thông tin bổ sung trong phần quản trị, cảnh báo role này có tính bảo mật cần phải cẩn thận khi cấp quyền.

Bạn có thể vào đường dẫn "/admin/people/permissions " sẽ thấy được hai phân miền mới được thêm vào

Tạo Phân Quyền Tĩnh trong Drupal 8/9

Tạo Phân Quyền Tĩnh trong Drupal 8/9

Drupal Dynamic Permissions

Trong Drupal có hỗ trợ tạo phân quyền động (Dynamic Permissions) thông qua một hàm định nghĩa cho phân quyền đó.

Bước 1 - Tạo callback định nghĩa quyền cho thông qua permission_callbacks của core hỗ trợ. Tạo một file /MODULENAME/MODULENAME.permissions.yml  thêm đoạn code 

permission_callbacks: 
   - \Drupal\mymodule\DynamicPermissions::permissions

Bước 2 - Tiếp theo là tọa file MODULENAME/src/DynamicPermissions.php:

<?php

namespace Drupal\mymodule;

use Drupal\Core\StringTranslation\StringTranslationTrait;

/**
 * Class DynamicPermissions
 * @package Drupal\mymodule
 */
class DynamicPermissions
{

  use StringTranslationTrait;

  /**
   * @return array
   */
  public function permissions()
  {
    $permissions = [];

    $count = 1;
    while ($count <= 5) {
      $permissions += [
        "mymodule permission $count" => [
          'title' => $this->t('mymodule permission @number', ['@number' => $count]),
          'description' => $this->t('This is a sample permission generated dynamically.'),
          'restrict access' => $count == 2 ? true : false,
        ],
      ];
      $count++;
    }
    return $permissions;
  }

}

Bước 3 - Sau đó vào trong "/admin/people/permissions" để kiểm tra

Tạo Phân Quyền Drupal

Sử dụng custom permissions

 Ở đây có 2 cách để sử dụng:

  1. - Trực tiếp trong code
  2. - Kiểm tra truy cập qua route.

Trực tiếp trong Code

if (\Drupal::currentUser()->hasPermission('mymodule permission 2')) {

  // The "mymodule permission 2" has been granted to the current user.

}else{

  // The "mymodule permission 2" has NOT been granted to the current user.

}

Kiểm tra qua Route

Dưới khai báo Route bạn thêm _permission như sau:

mymodule_permissions.index:
  path: '/mymodule-permissions'
  defaults:
    _controller: '\Drupal\mymodule\Controller\MyModuleController::index'
    _title: 'My Module Page Title'
  requirements:
    _permission: 'sample permission 2' 
Bạn thấy bài viết này như thế nào?
0 reactions

Add new comment

Image CAPTCHA
Enter the characters shown in the image.
Câu nói tâm đắc: “Điều tuyệt với nhất trong cuộc sống là làm được những việc mà người khác tin là không thể!”

Related Articles

Master list (in progress) of how to get parts of fields for use in Twig templates. I’m always having to look these up, so I thought I’d hash them out and write them down.

Litespeed Cache là plugin WordPress dùng để kết hợp với Web Server LiteSpeed nhằm tăng tốc website WordPress của bạn gấp nhiều lần

In this article, we are going to see how some tools & libraries will make people's lives easier during the development & code review process.

In this tutorial, you will learn how to improve the custom code, theme and module, and general code development by using the pre-commit hook on git

Trước khi tìm hiểu xem PHP Code Sniffer là gì thì các bạn cần phải nắm được coding convention là gì đã.