2012-02-01 117 views
2

我需要能夠添加頁面,然後通過不同類型的用戶限制這些頁面:匿名,部分和完整。Drupal - 限制訪問用戶

註冊時,用戶可以輸入所有詳細信息以獲得完整註冊或只有一半的詳細信息,例如不需要輸入地址,電話等以獲得部分註冊類型。

然後當添加頁面時,我需要能夠選擇匿名,部分和/或全部是否有權訪問它。如果他們沒有,那麼它仍然需要將頁面摘要顯示爲傳情,但是他們在登記和登錄之前將不能訪問主要內容。

我已經安裝了Simple Access插件,它允許我創建組,但不確定如何實施註冊表單,以便如果用戶只輸入必填字段,他們將成爲部分用戶,否則他們將成爲完整用戶。有什麼建議麼?

回答

3

您可以使用Rules模塊。創建在創建新用戶時運行的觸發規則,然後檢查字段並相應地爲用戶分配角色。

+0

我一直在尋找這在今天,似乎是能夠做到這一點,當一個用戶註冊,但沒有更新他們的帳戶時。我目前正在使用'帳戶'字段,例如帳戶:字段名,帳戶:字段姓等。這是否意味着我將不得不有一個單獨的規則更新帳戶,並使用'site:current-user:field- forename','site:current-user:field-surname'等等呢? – 2012-02-02 11:24:51

+0

其實,我很確定它可以與'帳戶'一起使用,因爲如果'數據值爲空',參數 - 帳戶:field-address1 AND'數據值爲空',參數 - 帳戶:field-address2,這似乎工作。但是,如果我用OR替換AND,它不起作用,有什麼想法? – 2012-02-02 12:13:06

+0

沒有什麼比我的頭腦更好的了,在規則中我從來沒有像AND/OR那樣的問題。也許嘗試使用2個不同的領域,並嘗試? – Laxman13 2012-02-02 14:00:10

1

你會很好地看看一些Drupal的初級教程。角色,規則,觸發器和CCK(和content_permissions) - 這些是您將要了解的模塊/概念。

他們會用你需要的武器武裝你。 CCK將允許您創建特定的內容類型,content_permissions(包含在CCK中)將允許您根據用戶的角色設置可見性,角色將允許您創建一組新的用戶,正如@ Laxman13所說,規則將允許您設置規則來完成需要完成的任務(即將此用戶添加到X角色),並且觸發器將爲您提供執行此操作的功能。

2

我已經結束了使用掛鉤來實現用戶是普通的授權用戶還是完整的用戶。有人可以檢查下面的鉤子是否正確? Im新的Drupal所以不知道添加/刪除角色時是否有其他表受到影響。

function module_user_update(&$edit, $account, $category) { 

$dob = field_get_items('user', $account, 'field_dob'); 
$address1 = field_get_items('user', $account, 'field_address1'); 
$address2 = field_get_items('user', $account, 'field_address2'); 
$address3 = field_get_items('user', $account, 'field_address3'); 
$city = field_get_items('user', $account, 'field_city'); 
$postcode = field_get_items('user', $account, 'field_postcode'); 
$county = field_get_items('user', $account, 'field_county'); 
$telephone = field_get_items('user', $account, 'field_telephone'); 


    if(empty($dob[0]['value']) || empty($address1[0]['value']) || empty($address2[0]['value']) || empty($address3[0]['value']) || empty($city[0]['value']) || empty($postcode[0]['value']) || empty($county[0][$ 
    { 
      $userid = $account->uid; 
      //remove full role from db so user is only an authorised user 
      db_query("DELETE FROM {users_roles} WHERE uid = '".$userid."' && rid = '5'"); 
    } else { 
      $userid = $account->uid; 
      //delete full role if it already exists so it doesnt go in twice 
      db_query("DELETE FROM {users_roles} WHERE uid = '".$userid."' && rid = '5'"); 
      //insert full role 
      db_query("INSERT INTO {users_roles} (rid, uid) VALUES ('5',$userid)"); 
    } 

}