如何根据用户角色隐藏部分HTML表单

时间:2014-04-27 12:30:40

标签: php html kohana

我正在使用Kohana 3.3开发一个网站,我希望根据用户的角色有选择地显示HTML UI元素。 e: - 如果用户是管理员,则显示“编辑”超链接,当管理员点击编辑按钮时,将文本框从“只读”更改为“正常”。

如果用户是注册的普通用户,则启用按钮“提问”。

如果用户是访客,则他没有特权。

现在我正在使用单个视图文件并在检查php变量的状态后更改可见性。不知何故,我觉得我没有正确地做,处理这种情况的建议方法是什么(任何插件?)?

1 个答案:

答案 0 :(得分:1)

好的,所以你想区分三种不同的情况

  • 访问者
  • 管理员
  • 用户

处理这个的地方,是你的控制者。在此,您可以访问Auth::instance()->get_user()

$user = Auth::instance()->get_user();
if ($user === null) {
    //visitor
} else {
    if ($user->has('roles', ORM::factory('Role', array('name' => 'admin')))) {
        //admin
    } else {
        //user
    }
}

既然您知道如何处理案件,那么您需要告诉您的观点。为此,您可以创建一个新变量,在该变量中加载三个视图中的一个 - 每种情况一个。

$specificViewName = "";
$user = Auth::instance()->get_user();
if ($user === null) {
    $specificViewName = "visitor";
} else {
    if ($user->has('roles', ORM::factory('Role', array('name' => 'admin')))) {
        $specificViewName = "admin";
    } else {
        $specificViewName = "user";
    }
}
$specificView = View::factory("index/".$specificViewName);

如果您在Controller_Template,现在可以使用$this->template->set("specificView", $specificView);

在这种情况下,您将拥有像这样的索引模板

<html><!--etc.-->
<h1>Welcome to my website</h1>
<!--stuff all sites share like navigation-->
<?php print $specificView; ?>
<!--more-->
</html>

index / visitor

<span class="sadtext">Nothing special for you here</span>

索引/用户

<form>
<button>ask a question!
</form>

索引/管理

<a href="edit">hyperlink</a>