kawaz.apps.projects.perms のソースコード

from permission.logics import PermissionLogic


[ドキュメント]class ProjectPermissionLogic(PermissionLogic): def _has_join_perm(self, user_obj, perm, obj): if obj.pub_state == 'draft': # 下書きプロジェクトには誰も参加できない return False if not user_obj.is_authenticated(): # 非認証ユーザーは参加不可 return False if user_obj in obj.members.all(): # 既に参加済みの場合は参加不可 return False if user_obj.is_member: # メンバーであれば参加可能 return True # それ以外(Wiile等)は参加不可 return False def _has_quit_perm(self, user_obj, perm, obj): if user_obj == obj.administrator: # 管理者は退会不可 return False if not user_obj.is_authenticated(): # 非認証ユーザーは参加・不参加不可 return False if user_obj not in obj.members.all(): # 参加していないユーザは参加不可 return False # それ以外の場合は参加可能(Willeチェックは不要) return True
[ドキュメント] def has_perm(self, user_obj, perm, obj=None): """ Check if user have a specified project permissions (of obj) """ # 非承認ユーザーはあらゆる権限を持たない # Note: projects.view_project は別ロジックで定義 if not user_obj.is_authenticated(): return False # このロジックで処理するパーミッションを制限 if perm not in ('projects.add_project', 'projects.change_project', 'projects.delete_project', 'projects.join_project', 'projects.quit_project'): return False if obj is None: # モデルパーミッション permissions = ('projects.add_project', 'projects.change_project', 'projects.delete_project', 'projects.join_project', 'projects.quit_project' ) if perm in permissions and user_obj.is_member: # Seele, Nerv, Chidlren は下記パーミッションを持つ可能性がある return True return False # macros def author_required(user_obj, perm, obj): if not user_obj.is_member: return False return obj.administrator == user_obj # object permission permission_methods = { 'projects.change_project': author_required, 'projects.delete_project': author_required, 'projects.join_project': self._has_join_perm, 'projects.quit_project': self._has_quit_perm, } if perm in permission_methods: return permission_methods[perm](user_obj, perm, obj) return False