【问题标题】:Appengine users and admins - render template elements depending on user typeAppengine 用户和管理员 - 根据用户类型呈现模板元素
【发布时间】:2017-07-24 14:34:29
【问题描述】:

我正在使用适用于 Python 的 Google 身份平台,并且我有两种类型的用户 - 提供者和顾问。两者都将在 Google Apps 域中拥有一个帐户。

我认为为了分离我的应用工作流程

  • 提供者应该是普通用户

  • 顾问应该是管理员用户

此处讨论管理员用户: https://cloud.google.com/appengine/docs/standard/python/users/adminusers

我有一个基本的了解,is_current_user_admin() 提供了一个测试,如果当前用户是管理员类型(因此是我的应用程序中的顾问)。

根据用户类型,我希望在特定页面上显示不同的内容。

例如,如何在以下下拉菜单中仅向管理员显示“插入评估”链接,而不向非管理员用户显示:

<div class="btn-group pull-right">
  <button type="button" class="btn btn-danger">Consult Actions</button>
  <button type="button" class="btn btn-danger dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  <span class="sr-only">Toggle Dropdown</span>
  </button>
  <div class="dropdown-menu">
    <a class="dropdown-item" href="#">Edit Consult</a>
    <a class="dropdown-item" href="#">Cancel Consult</a>
  <div class="dropdown-divider"></div>
    <a class="dropdown-item" href="/schedule/insert-assessment?key={{consult.key.urlsafe()}}">Insert Assessment</a>
  </div>
</div>

编辑:定义管理变量...?

def get(self):
        consult_key = ndb.Key(urlsafe=self.request.get('key'))
        consult = consult_key.get()
        # assessment and consult have the same key ID
        assessment = Assessments.get_by_id(consult_key.id())
        template = JINJA_ENVIRONMENT.get_template('/templates/view-consult.html')
        template_values = {
        'consult': consult,
        'assessment': assessment
        'admin': user is not None and user.is_current_user_admin()
        }
        self.response.out.write(template.render(template_values))

【问题讨论】:

    标签: python-2.7 google-app-engine jinja2 google-identity


    【解决方案1】:

    您的问题分为两个独立的子问题:如何有条件地在模板中显示文本,以及如何判断当前用户是否为管理员。

    第一个问题通过{% if %} 标签解决。例如,通过

    {% if admin %}
    <div class="dropdown-divider"></div>
      <a class="dropdown-item" href="/schedule/insert-assessment?key={{consult.key.urlsafe()}}">Insert Assessment</a>
    </div>
    {% endif %}
    

    第二个问题是如何设置admin变量的值。为此,您可以在链接到的页面上借用代码,并使用类似

    'admin': user is not None and user.is_current_user_admin()
    

    渲染模板时。

    【讨论】:

    • 太棒了......所以我应该在我传递给 jinja 模板的 template_values 字典中声明那个 'admin' 变量吗?如上面的编辑?
    • 这很好,戴夫,请注意,尽管您错过了用户中的 s:即 users.is_current_user_admin()。但很好的答案:)
    • 我的意思是user,假设你会在代码中完成以上user = users.get_current_user()
    猜你喜欢
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多