2012-02-01 123 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)"); 
    } 

}