Приложение Django для «включения» других приложений для конкретного пользователя - PullRequest
0 голосов
/ 03 августа 2011

Я новичок в django, и мне очень нравится его модульная конструкция, поэтому я решил воспользоваться им и поместить все отдельные функции в разные приложения.

Теперь мне нужен способ включения и выключенияэто приложения как пользователем, так и администратором.Панель параметров пользователя будет выглядеть следующим образом:


   [ ] blog
   ---------------------
   [ ] tagging  <strong>[BUY]</strong>

После проверки опции «блог» пользователь получит блог в своем профиле, а после покупки и проверки «тегов» он получит теги.для блога.


На панели администратора будет возможность отображать или скрывать приложение из пользовательской панели.

Интересно, если:

  1. есть приложение, которое поможет мне включить и выключить приложение для конкретного пользователя
  2. , а если нет -
    1. , что будет правильной "архитектурой" для такого приложения django?
    2. Может ли это быть сделано динамически в промежуточном программном обеспечении или во время входа в систему (проверить доступные приложения из базы данных, включить их, перенаправить на домашнюю страницу пользователя)?
    3. Какие-нибудь советы для такой задачи?

Спасибо, Роберт

1 Ответ

0 голосов
/ 03 августа 2011

Я не слышал ни о каком таком приложении ... Но я не думаю, что его будет слишком сложно построить.

Если бы я делал это, я бы поставил проверку разрешений в точках входа для каждого приложения. Например:

check_app_permission = lambda request: permissions.check_app_permission("blog", request)

def view_blog(request, …):
    check_app_permission(request)
    …

(может быть даже возможно сделать немного магии и ввести эту проверку на уровне urls.py ...)

Кроме того, я бы создал has_app_permission тег шаблона:

<div id="sidebar">
    {% if has_app_permission "blog" %}
        {% include "blog/sidebar_recent_posts.html" %}
    {% endif %}
</div>

или аналогичный.

Наконец, есть приблизительно миллион способов, которыми вы могли бы внедрить систему разрешений ... И без дополнительной информации я не смог бы прокомментировать. Но самое простое было бы примерно так:

class App(Model):
    name = CharField(…)

class AppPermission(object):
    app = ForeignKey(App)
    user = ForiegnKey(User)

def user_has_permission(user, app_name):
    return AppPermission.objects.filter(app__name=app_name, user=user).exists()

Я бы не пытался делать это с промежуточным программным обеспечением, потому что, если я правильно понимаю проблему, я ожидаю, что вы (или, по крайней мере, я ожидаю, что я) буду тратить кучу времени на создание общей структуры, которая, в конец, просто будет иметь чеки, похожие на те, которые указаны выше.

Это помогает? Есть что-то, что я могу уточнить?

...