drupal 8 ——自定義權限

在項目開發裏面,我遇到了這麼一個需求,就是對於node的title字段,編輯內容的角色不容許對title進行編輯。title字段是建立內容類型時自動生成的字段,不能在drupal8後臺直接配置權限,因此我須要用代碼自定義一個權限。php

1.在/modules/custom下自定義一個模塊,個人模塊名爲one_node_title_permissionnode

 

2.新建三個文件,分別爲one_node_title_permission.info.yml,one_node_title_permission.module,one_node_title_permission.permissions.yml函數

   注意:文件名必須與模塊名相對應spa

 

3.在one_node_title_permission.info.yml文件中,配置模塊信息以下rest

name: One Node Title Permission
description: 'Add permission for the title of node.'
type: module
core: 8.x
package: one

 

4.在one_node_title_permission.permissions.yml文件中,配置的是我要添加的權限信息,以下所示code

one_node_title_permission permission:
    title: 'Edit own value for field field_title'
    restrict access: false

 

5.這樣,基本的權限已經配置好了。在本地drupal8中的/admin/modules目錄下,找到剛剛新加的module並勾選,以下圖所示orm

而後installblog

 

6.在/admin/people/permissions頁面中,選中一個角色進行權限的配置,勾選剛剛自定義的權限並保存ip

 

7.上面咱們僅僅只是添了一條權限,權限所對應的功能尚未加,因此我要在one_node_title_permission.module添加開發

one_node_title_permission_form_alter函數,在該函數裏面添加我須要的代碼。注意,該函數名是模塊名+_form_alter
<?php

/**
 * @file
 * One Contact US Module.
 */

use Drupal\Core\Form\FormStateInterface;

/**
 * Implements hook_form_alter().
 */
function one_node_title_permission_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  $route_match = \Drupal::routeMatch();//獲取當前路徑
  $user = \Drupal::currentUser();//獲取當前用戶角色
  $access = !$user->hasPermission('one_node_title_permission permission');//判斷是否有此權限,沒有返回false
  if ($route_match->getRouteName() == 'entity.node.edit_form' && $access) {
    $form['title']['#disabled'] = 'disabled';//對‘title’字段不可編輯
  }
}

 在上面的代碼裏,我具體要實現的功能是在node的編輯頁面裏面,對不具備該權限的用戶,不容許對title字段編輯。

相關文章
相關標籤/搜索