Django を使用している場合は、 などの他の ID を作成する代わりにauth
、常にこのメカニズムに依存してユーザーを識別します(たとえば、 の下の e コマース サイトで追加のセッションが必要な場合を除きます)。session
uuid1()
HTTPS
権限の部分については、主にKoliber Servicesで説明されているように、所有権を直接確認できます。との関係はCompany
、パーミッション チェックのロジックにとって重要です。関係をモデル化するには多くの方法があるため、コードは大きく異なります。例えば:User
Contact
# a modeling way
User.company -> Company : an user belongs to a company
Contact.contributor -> User : a contact is contributed by an user, would be invalid is user is leaving the company
# could check accessibility by
can_view = contact.contributor.company_id == current_user.company_id
# another modeling way
User.company -> Company : an user belongs to a company
Contact.company -> Company : a contact info is owned by a company, does not share globally
# could check accessibility by
can_view = contact.company_id == current_user.company_id
の場合、ユーザーcan_view
はFalse
無許可の試行に対して 403 を取得し、ログに記録する必要があります。
通常、コンテンツ保護には上記の方法で十分です (Django Admin にはまだありません)。ただし、さまざまな種類のパーミッション チェックや行パーミッション チェックがある場合は、統一されたパーミッション API を使用することをお勧めします。
たとえば、Django-guardian を例にとると、会社をグループにマップしassign
can_view
、ユーザーの会社を表すグループの連絡先を許可するだけです。または、シグナルまたはセロリ タスクを使用して連絡先が作成されたときの、会社内のすべてのユーザーへassign
のアクセス許可。can_view
/contact/1/edit/
さらに、の代わりに使用できます/contact/edit/?id=1
。このようにして、このint(request.GET('id'))
部分は のように urlconf に移動されr'^contact/(?P<pk>\d+)/$'
、コードが少なくなり、より明確になります。