150 lines
5.5 KiB
Python
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)
|