Django にはすでにグループと権限システムがあり、目的には十分かもしれません。
http://docs.djangoproject.com/en/dev/topics/auth/
通常、コードでは、ユーザーに権限があるかどうかを確認します。ユーザーには、自分の権限と、所属するグループの権限があります。これは、管理コンソールから非常に簡単に管理できます。
2 つの部分を確認する必要があります。
- ページをリクエストしているユーザーにその権限があることを確認してください。
- ユーザーが許可を持っている場合にのみ、ユーザーへのリンクを表示します。
1.の場合、次のようにデコレータで権限を確認できます。
from django.contrib.auth.decorators import permission_required
@permission_required('polls.can_vote')
def some_view(request):
2. の場合、現在ログインしているユーザーの権限は、テンプレート変数 {{ perms }} に格納されます。このコードは、上記と同じ権限をチェックします。
{% if perms.polls.can_vote %}
<a href="/vote">vote</a>
{% endif %}
リンクのリストを生成するには、 user.get_all_permissions() を反復処理して、dict からリンク (またはリンクを生成する関数) をフェッチします。
def more_elaborate_list_of_links_for_a_perm(user):
return ["/link1", ...]
_LINKS = {
'polls.can_vote' : lambda u: ["/user/specific/link/" + u.id],
'polls.can_close': lambda u: ['/static/link/1', 'static/link/2'],
'polls.can_open' : more_elaborate_list_of_links_for_a_perm
}
def gen_links(user):
# get_all_permissions also gets permissions for users groups
perms = user.get_all_permissions()
return sum((_LINKS[p](user) for p in perms if p in _LINKS), [])
おそらく他にも多くのアプローチがあります。