This repository has been archived on 2023-02-21. You can view files and clone it, but cannot push or open issues or pull requests.
veridic/acs/models.py

150 lines
5.5 KiB
Python

from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import ugettext as _
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
from django.contrib.contenttypes.models import ContentType
from django.contrib.contenttypes import generic
class Role(models.Model):
'''Role'''
#role = models.OneToOneField(User,
# primary_key = True, related_name = 'user')
name = models.CharField(max_length = 40, unique = True)
users = models.ManyToManyField(User, verbose_name=_('users'), blank=True)
roles = models.ManyToManyField('self', symmetrical=False, verbose_name=_('roles'), blank=True)
class Meta:
verbose_name = _('role')
verbose_name_plural = _('roles')
def __unicode__(self):
return self.name
class Action(models.Model):
'''Action'''
name = models.CharField(max_length = 40, unique = True)
class Meta:
verbose_name = _('action')
verbose_name_plural = _('actions')
def __unicode__(self):
return self.name
class Activity(models.Model):
'''Activity'''
name = models.CharField(max_length = 40, unique = True)
actions = models.ManyToManyField(Action, verbose_name=_('actions'), blank=True)
activities = models.ManyToManyField('self', symmetrical=False, verbose_name=_('activities'), blank=True)
class Meta:
verbose_name = _('activity')
verbose_name_plural = _('activities')
def __unicode__(self):
return self.name
class AcsObject(models.Model):
'''Object'''
name = models.CharField(max_length = 40, unique = True)
class Meta:
verbose_name = _('object')
verbose_name_plural = _('objects')
def __unicode__(self):
return self.name
class View(models.Model):
'''View
A view is a container for objects.
Everything is object'''
name = models.CharField(max_length = 40, unique = True)
acs_objects = models.ManyToManyField(AcsObject, verbose_name=_('acs objects'), blank=True)
views = models.ManyToManyField('self', symmetrical=False, verbose_name=_('views'), blank=True)
users = models.ManyToManyField(User, verbose_name=_('users'), blank=True)
roles = models.ManyToManyField(Role, verbose_name=_('roles'), blank=True)
actions = models.ManyToManyField(Action, verbose_name=_('actions'), blank=True)
activities = models.ManyToManyField(Activity, verbose_name=_('activities'), blank=True)
class Meta:
verbose_name = _('view')
verbose_name_plural = _('views')
def __unicode__(self):
return self.name
WHO = (
('User', _('User')),
('Role', _('Role')),
)
WHAT = (
('AcsObject', _('Object')),
('View', _('View')),
('User', _('User')),
('Role', _('Role')),
('Action', _('Action')),
('Activity', _('Activity')),
)
HOW = (
('Action', _('Action')),
('Activity', _('Activity')),
)
class AcsPermission(models.Model):
'''AcsPermission: Who What How'''
select_who = models.CharField(max_length = 20,
verbose_name = 'Which object class?',
default = 'User',
choices = WHO)
who_user = models.ForeignKey(User, related_name = "who_user", verbose_name = _('User'), blank=True, null=True)
who_role = models.ForeignKey(Role, related_name = "who_role", verbose_name = _('Role'), blank=True, null=True)
select_what = models.CharField(max_length = 20,
verbose_name = 'Which object class?',
default = 'AcsObject',
choices = WHAT)
what_acs_object = models.ForeignKey(AcsObject, verbose_name = _('Object'), blank=True, null=True)
what_view = models.ForeignKey(View, verbose_name = _('View'), blank=True, null=True)
what_user = models.ForeignKey(User, related_name = "what_user", verbose_name = _('User'), blank=True, null=True)
what_role = models.ForeignKey(Role, related_name = "what_role", verbose_name = _('Role'), blank=True, null=True)
what_action = models.ForeignKey(Action, related_name = "what_action", verbose_name = _('Action'), blank=True, null=True)
what_activity = models.ForeignKey(Activity, related_name = "what_activity", verbose_name = _('Activity'), blank=True, null=True)
select_how = models.CharField(max_length = 20,
verbose_name = 'Which object class?',
default = 'Action',
choices = HOW)
how_action = models.ForeignKey(Action, related_name = "how_action", verbose_name = _('Action'), blank=True, null=True)
how_activity = models.ForeignKey(Activity, related_name = "how_activity", verbose_name = _('Activity'), blank=True, null=True)
class Meta:
verbose_name = _('permission')
verbose_name_plural = _('permissions')
def __unicode__(self):
if self.select_who == 'User':
who = self.who_user.username
else:
who = self.who_role.name
if self.select_what == 'AcsObject':
what = self.what_acs_object.name
elif self.select_what == 'View':
what = self.what_view.name
elif self.select_what == 'User':
what = self.what_user.username
elif self.select_what == 'Role':
what = self.what_role.name
elif self.select_what == 'Action':
what = self.what_action.name
else:
what = self.what_activity.name
if self.select_how == 'Action':
how = self.how_action.name
else:
how = self.how_activity.name
return _('Permission of %s on %s to perform %s') %(who, what, how)