5

ダッシュボードのユーザーを制限するにはどうすればよいですか? サンドボックス サイトに同梱されているゲートウェイ アプリをインストールしましたが、私が知る限り、ユーザーはダッシュボードへのアクセスが自動的に承認されているだけです。明らかに、これはセキュリティ上の問題です。認証されていないユーザーがサイトの一部を表示するのを既にブロックしていますが、ダッシュボードへのアクセスを制限/承認できるようにする必要があります。

私の見方では、カスタムビュー/フォームを作成してダッシュボードから実行できるようにし、それに保留中のアカウント登録フィードを持たせる必要があります。

任意のポインタをいただければ幸いです。

関連コード:

import logging

from django.views import generic
from django.contrib.auth.models import User
from django.contrib import messages
from django.core.mail import send_mail
from django import http
from django.core.urlresolvers import reverse
from django.template.loader import get_template
from django.template import Context

from apps.gateway import forms
from oscar.apps.customer.forms import generate_username

logger = logging.getLogger('gateway')


class GatewayView(generic.FormView):
    template_name = 'gateway/form.html'
    form_class = forms.GatewayForm

    def form_valid(self, form):
        real_email = form.cleaned_data['email']
        username = generate_username()
        password = generate_username()
        email = 'dashboard-user-%s@oscarcommerce.com' % username

        user = self.create_dashboard_user(username, email, password)
        self.send_confirmation_email(real_email, user, password)
        logger.info("Created dashboard user #%d for %s",
                    user.id, real_email)

        messages.success(
            self.request,
            "The credentials for a dashboard user have been sent to %s" % real_email)
        return http.HttpResponseRedirect(reverse('gateway'))

    def create_dashboard_user(self, username, email, password):
        user = User.objects.create_user(username, email, password)
        user.is_staff = True
        user.save()
        return user

    def send_confirmation_email(self, real_email, user, password):
        msg = get_template('gateway/email.txt').render(Context({
            'email': user.email,
            'password': password
        }))
        send_mail('Dashboard access to Oscar sandbox',
                  msg, 'blackhole@latest.oscarcommerce.com',
                  [real_email])

https://github.com/django-oscar/django-oscar/blob/master/sites/sandbox/apps/gateway/views.py これにより、電子メールが有効である限り、is_staff ユーザーが自動的に作成されます。

4

1 に答える 1

2

そのため、私が最終的に使用した解決策は、ゲートウェイへのアクセスをスーパーユーザーに制限することでした。アプリはすでに

django.contrib.auth.middleware.AuthenticationMiddleware

ユーザーモデルにアクセスできます。ゲートウェイのメール リクエスト テンプレートに if ブロックを配置しましたform.html

{% if user.is_authenticated %}
    {% if user.is_superuser %}
    <email form>
    {% else %}
    <insufficient user privileges partial template>
    {% endif %}
    <not logged in partial template> 
{% endif %}

同様に、小売アクセスの場合、私は使用しました

{% if user.is_authenticated %}
    {% if user.is_staff%}
    <email form>
    {% else %}
    <insufficient user privileges partial template>
    {% endif %}
    <not logged in partial template> 
{% endif %}

この方法では、スーパーユーザーのみがスタッフ メンバーを作成でき、スタッフ メンバーとスーパーユーザーの両方が小売アカウントを作成できます。

于 2015-11-30T02:24:53.613 に答える