您可以根据当前用户角色过滤视图用户列表结果 -- 7 领域 和 views 领域 drupal 相关 的问题

Can you filter views user list result based on the current users role


1
vote

问题

中文

是否可以使视图用户列表的结果仅包含具有当前用户的特定角色的用户?

我不熟悉看法,但它似乎符合比标配的更好的看起来和更具可用的用户列表,而不是用Drupal来说。但是,我需要将用户列表过滤。

i设置由特定角色标识的多个用户组(如组Member - A组)。该组的管理员用户具有额外的管理角色(如组管理器),但在使用视图时,它们应该只在自己的组中看到用户。

可以这样做的东西吗?我正在编写模块,以便我可以使用API​​,如果这是可以的方式。我正在使用drupal 7。

英文原文

Is it possible to have the result of a views user list only contain users with a specific role that the current user also has?

I'm not familiar with Views, but it seems to fit the bill for making a better looking and more usable user list than the one that comes standard with Drupal. However, I need to have the user list filtered.

I setup multiple user groups that are identified by a specific role (like groupmember - group A). Admin users of that group have an additional admin role (like group manager), but they should only see users in their own group when using the view.

Can something like this be done? I'm writing modules so I could use the api if that is the way to go. I'm using Drupal 7.

     

回答列表

1
 
vote
vote
最佳答案
 

正如我理解的那样,您要创建一个列出哪些列出的用户,其中仅列出具有当前用户也具有特定角色或角色的用户。以下方法可以是解决方案:

  1. 在视图中添加字段'user:uid'(让视图为"用户" )。

  2. 使字段为"从显示排除" 。

  3. 添加"全局PHP" 字段,并在"值代码" 下添加一些代码:

       $user_load = user_load($data->uid); $data->user_role = $user_load->roles; return ($data->user_role);   

    在这里,我们正在获得正在呈现的每个用户的角色。

    此处使用了'$ data-> uid'而不是'$ chor-> uid'以在d7中以$行返回nid。虽然在这种情况下,但在$ row-> UID返回正确的信息。

  4. 使字段也是"排除从显示" 。

  5. 在过滤条件下,添加"全局PHP" 字段并添加以下代码:

    i)在'设置代码'下:

        global $user;  $roles = array();  $view->roles = $user->roles;    

    在这里我们正在获得当前用户的所有角色。

    ii)用户'筛选器代码':

        // Suppose you have five roles in the instance with the 'rid's as saved in  // 'role' table as : 1 (anonymous user), 2(authenticated user), 3(administrator), 4(hr), 5(web admin)  // Suppose ROLE you want be matched has RID = 4  if (isset($view->roles[4])) {// Checking if the current user has the role that you want to be matched with    if (!isset($data->user_role[4])) {// If the user getting rendered doesn't have that role      return TRUE;// If TRUE is returned, then that row is NOT shown    }  }    

注意:考虑,安装了"Views_php" 模块。

注意:如果当前用户没有才能过滤您想要的角色,那么视图将根据其他条件列出默认用户列表。

注意:我们可以直接在过滤器代码中写入"rive" ,我们可以提供一个管理菜单,它将使用文本字段以及具有所需访问权限的admin或用户呈现自定义表单,可以设置任何角色(s )通过该表格并将其保存在Drupal变量中,我们可以呈现我们希望的角色信息与我们的过滤器代码中的变量匹配。

希望它有助于

 

As I understand, you want to create a view which list users which lists only those users who has a specific role or roles that the current user also has. The below approach can be a solution :

  1. Add a field 'User: Uid' in your view (Let the view is of type 'Users').

  2. Make the field as 'Exclude from display'.

  3. Add a 'global php' field and add some code as below under 'VALUE CODE' :

     $user_load = user_load($data->uid); $data->user_role = $user_load->roles; return ($data->user_role); 

    Here, we are getting the roles of each user being rendered.

    Here used '$data->uid' instead of '$row->uid' to avoide issue of returning NID with $row in D7. Although in this case '$row->uid' returns correct information.

  4. Make the field as 'Exclude from display' as well.

  5. Under Filter Criteria add a 'global php' field and add the below codes :

    i) Under 'Setup Code' :

      global $user;  $roles = array();  $view->roles = $user->roles;  

    Here we are getting all the roles of the current user.

    ii) User 'Filter Code' :

      // Suppose you have five roles in the instance with the 'rid's as saved in  // 'role' table as : 1 (anonymous user), 2(authenticated user), 3(administrator), 4(hr), 5(web admin)  // Suppose ROLE you want be matched has RID = 4  if (isset($view->roles[4])) {// Checking if the current user has the role that you want to be matched with    if (!isset($data->user_role[4])) {// If the user getting rendered doesn't have that role      return TRUE;// If TRUE is returned, then that row is NOT shown    }  }  

Note : Considering, 'views_php' module is installed.

Note : If the current user doesn't have the role that you want be filtered for, then the view will list the default list of users based on other conditions.

Note : Instead of writing the 'rid' in the filter code directly, we can provide an admin menu which will render a custom form with a text field and, admin or user with required access permission, can set any role(s) through that form and save it in a drupal variable, and we can render the role information we want be matched from the variable inside our filter code.

Hope it helps

 
 
 
 
0
 
vote

Views 中,您可以添加一个块,显示那些具有与当前用户相同的角色的用户:

视图块配置的示例:

必须自动播放当前用户,因此我们将能够获得他的角色:

块设置 - >访问:角色|经过身份验证的用户

现在,添加上下文过滤器:

用户:角色

当滤波器值不可用 - > 提供默认值 - > PHP代码:

  global $user; if ($user->uid) {   $roles = $user->roles;    // unset 'authenticated user' ( related users doesn't have to be logged in )   $roles = array_diff($roles, array('authenticated user'));    // get roles keys   $roles = array_keys($roles);    // compose the arguments   // in order to displaying only users with exactly the same roles as current user has   // the arguments will be separated by commas.   $arguments = implode(",", $roles);   return $arguments; } else {   return false; }   

用户可能有多个角色,因此必须允许多个值:

更多 - >检查:允许多个值

这一切都是为了这个上下文过滤器。保存。

可能,您需要从视图中删除当前用户,因为他在列表中不需要他的名字。为此,请添加下一个上下文过滤器:

用户:UID

当滤波器值不可用 - >提供默认值 - >登录用户的用户ID

更多 - >检查:排除

 

In Views, you can add a block showing those users which have the same roles as current user has:

An example of view block configuration:

The current user has to be autencitaded, so we'll be able to get his roles:

BLOCK SETTINGS -> Access: Role | authenticated user

Now, add contextual filters:

User: Roles

When the filter value is NOT available -> Provide default value -> PHP code:

global $user; if ($user->uid) {   $roles = $user->roles;    // unset 'authenticated user' ( related users doesn't have to be logged in )   $roles = array_diff($roles, array('authenticated user'));    // get roles keys   $roles = array_keys($roles);    // compose the arguments   // in order to displaying only users with exactly the same roles as current user has   // the arguments will be separated by commas.   $arguments = implode(",", $roles);   return $arguments; } else {   return false; } 

Users might have multiple roles, so multiple values have to be allowed:

More -> check: Allow multiple values

That's all for this contextual filter. Save it.

Probably, you would need to remove the current user from the view, because he don't need his name on the list. To do that, add next contextual filter:

User: Uid

When the filter value is NOT available -> Provide default value -> User ID from logged in user

MORE -> check: exclude

 
 

相关问题

1  规则组件的特定权限  ( Specific permissions for rules components ) 
我创建了两个规则组件,但我找不到任何模块来为角色设置特定权限。 我想让一些角色的用户允许运行第一个组件但不是第二个组件。 谢谢。 ...

0  旁路自定义模块中的权限  ( Bypass permissions in custom module ) 
我已经写了一个自定义模块,当提交WebForm并将其邮寄给管理员时,会生成PDF。我正在使用打印模块来生成pdf。问题是,在生成PDF时似乎使用用户的权限,而不是管理员。这通常可以用于经过身份验证的用户,但对于访客来说,它只是完全失败。 我已启用"访问PDF版本" 和"访问自己的WebForm提交" 的所有用户(匿名...

3  基于国家的城市名单选择  ( Country based city list selection ) 
我可以使用分层选择模块,但它包含很多在输入数据时的手动工作。我想要所有国家/地区他们的城市名单。怎么做 ? 是否有任何模块,有助于根据国家选择显示城市列表?有一种自定义方式吗?提前谢谢 ...

1  如何将多值图像字段转换为UL  ( How to turn multi value image field into a ul ) 
我有一个多价图像字段。我想在UL / Li中输出图像。我应该在preprocess_field中添加前缀和后缀吗? ...

0  需求数据可以是drupal hook_token_info中的数组吗?  ( Can needs data be an array in drupal hook token info ) 
功能 hook_token_info() 具有用于需求数据的数组? hook_token_info() { $type = array( 'name' => t('ABC Settings'), 'description' => t('Token...

0  有一条路径有两种类型的视图  ( Having two types of view for one path ) 
我需要一个分类术语的视图,它将任何子项术语显示为链接和标记为术语的产品节点表,但我只能解决如何应用一个或另一个。 任何帮助感谢! 编辑以获取清晰度:对于路径分类/术语/术语/%,我需要向子项术语或儿童术语显示与该术语相关联的所有产品(节点)的子项。我已经假设将这两个两者相结合到一个视图中,以某种方式将这两个人组合在一...

0  具有日期字段的面板页面标题  ( Panel page title with date field ) 
我有一个面板页面,标题设置为%node:field_pub_year从替换列表。 Field_pub_year是要选择发布年份的日期字段。我的问题是,这是一个完整的日期,如'2012-01-01 00:00:00'作为标题。是否可以仅显示"2012" 作为标题。 谢谢。 ...

1  将创建内容菜单项显示为Ananymous用户,但在点击中致电登录/注册弹出窗口的URL  ( Show create content menu item to ananymous users but call url for login register ) 
我认为这样做会很简单,但在很多搜索后,我找不到精确的解决方案。 所以问题是,我有2-3个主菜单项,我必须向匿名用户展示,但必须调用URL(用于登录/注册弹出窗口)&如果单击它们,请提示登录或注册。 我找到的最佳解决方案我找到了创建内容链接"node / add / node类型" 是类似的 - fu...

1  多个提交处理程序  ( Multiple submit handlers ) 
我有以下代码: function corporate_form_alter(&$form, &$form_state, $form_id) { switch ($form_id) { case 'user_login_block': { unset($form['links'])...

0  curdate()返回错误的结果  ( Curdate return wrong result ) 
我在drupal中写下SQL查询看起来像这样。 让我们假设今天的日期是2013-07-24,节点总数为4 。 $query = "SELECT COUNT(*) amount FROM {node} n LEFT JOIN {flagging} f ON n.nid = f...

0  如何禁用特定节点的CKEditor?  ( How to disable ckeditor for a particular node ) 
我想在特定节点内的内容进行风格,但CKEDITOR似乎通过引入不必要的标记而干扰。 在drupal 6中,您可以通过在节点形式上添加生成的ID来禁用它,以至于CKEditor的配置文件设置。 我可以在drupal 7版本中找到没有类似的设置。 我在这里缺少一些东西吗?是否有Drupal 7类似的配置? 或者我应该使用...

1  失去使用节点加载与Ajax表单提交中的参数使用节点加载的能力  ( Lose ability to use node load with an argument in ajax form submit ) 
我有这样的基本形式,这实际上只是一个提交按钮: function mymodule_form($form, &$form_state) { $form = array(); $form['submit'] = array( '#type' => 'submit', ...

1  如何在OG中添加标签项,显示与该组相关的内容类型?  ( How may i add a tab item in an og that shows a content type related to that grou ) 
我们有Drupal Commons 3(在Drupal 7)。在我们的团队中,我想在Group的标题附近添加标签,该标签链接到某个内容类型。我准备好了一个看法。如何将该视图添加到OG选项卡? 更新和屏幕镜头: 所以我有这个视图: 我跳起来在这里创建一个新选项卡: 通过使用此设置: ...

3  哪个钩子或TPL文件控制视图的输出(以操纵结果)?  ( Which hook or tpl file controls the output of a view to manipulate the results ) 
我正在创建一个反复出现的事件视图页面,但是当前我的视图的输出正在显示同一日期事件的多个引用。我也没有使用字段作为输出,我正在使用内容|预告片。 我已经提出了2个解决这个问题的方法,但是要澄清哪个是最好的,怎么走它。 查找输出视图行的钩子,然后写入条件以比较每行并删除重复项。 创建一个tpl文件并在视图输出上...

0  如何为视图上的每个链接设置一个变量,未格式化列表  ( How to set one variable for each link on a views un formatted list ) 
我正在尝试创建一个变量来放入l()函数。这是下面的$ Rellink。 <?php print l('<span class="link-spanner"></span>', "$rellink", array ('html' => TRUE)); ?> 我有一个内容节点列表,我在未格式化的视图中显示。我希...

0  从SQL转储导入内容类型  ( Import content types from sql dump ) 
我最近在我目前正在努力的网站上崩溃。我正在运行sqlite,崩溃锁定了db。无论我尝试了什么,我无法再次访问数据库(杀死进程,导出到新的DB,重新安装Drupal)。所以我决定迁移到mysql。我将SQL转储从旧数据库转换为MySQL语法,没有太多问题。我可以像罚款一样重复导入我的节点,但是我无法获取我的内容类型,面...

1  是否有任何方法可以使用jQuery覆盖来确认/拒绝节点删除?  ( Is there any way to use a jquery overlay to confirm reject node deletion ) 
当我删除一个节点(任何类型的节点,概括)时,我想通过jQuery的是/否对话框来实现确认,而不是在页面上突破,而不是被重定向到单独的页面"此操作无法撤消" 消息。这是21世纪和所有... http://bootboot.com/ 似乎是处理对话框的好候选人,但问题是如何将其绑定到表单和节点删除过程中,理想情况下...

21  自定义视图处理程序没有表  ( Custom views handler without table ) 
首先似乎很容易,但我在这件事上失去了头发。 我只是想添加一个使用没有表的自定义视图处理程序。 我试图用作php提出的php,$ data ['peews'] ['mycustomfield']在hook_views_data中,但仍然是"mycustomfield colum未找到" 。 任何帮助?谢谢! ...

1  Geshi过滤器不突出显示  ( Geshi filter not highlighting ) 
使用Drupal 7.22,Geshi过滤器7.x-1.2和库7.x-2.1 选中完整的HTML过滤器中的复选框"使用Geshi过滤器" ,但仍然在我尝试使用这样的内容时: <php> echo 'some code'; // not highlighting at all :X </php> 根本不突出...

0  WebForm Ajax提交,多种方法的相同问题  ( Webform ajax submission same problem with multiple approaches ) 
我正在尝试使用ajax提交的WebForm。我尝试了3个方法以完成它,所有3都导致了同样的问题。 我已经尝试了 webform ajax 模块,我已经尝试了这个答案我尝试了另一个在沙箱中的模块只有在drupal.org中,但它应该工作很好。 这些方法中的一些方法在我的其他Drupal项目上工作,但不是在当前的项目中。...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.