Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import urllib
- from django.core.exceptions import ImproperlyConfigured
- from django.core.mail import send_mail
- from django.db import models
- from django.db.models.manager import EmptyManager
- from django.utils.crypto import get_random_string
- from django.utils.encoding import smart_str
- from django.utils.translation import ugettext_lazy as _
- from django.utils import timezone
- from django.contrib import auth
- # UNUSABLE_PASSWORD is still imported here for backwards compatibility
- from django.contrib.auth.hashers import (
- check_password, make_password, is_password_usable, UNUSABLE_PASSWORD)
- from django.contrib.auth.signals import user_logged_in
- from django.contrib.auth.models import Permission, PermissionManager
- from django.contrib.contenttypes.models import ContentType
- # Create your models here.
- #First, Modified the auth_permission table
- isdelegate = models.BooleanField('L2 Delegate', default=False)
- isdelegate.contribute_to_class(Permission, 'isdelegate')
- class L2Company(models.Model):
- BUSINESS_TYPE_CHOICE = (
- (1, 'Mobile Network'),
- (2, 'Site Provider'),
- (3, 'Maintenance Prov.'),
- )
- company_code = models.CharField('Short Name', max_length = 10, blank=False, unique=True, help_text="lowercase, allowed : a-z, 0-9, _")
- is_active = models.BooleanField(default=True)
- btype = models.IntegerField('Bussiness Type', default=1, choices=BUSINESS_TYPE_CHOICE)
- def __unicode__(self):
- return self.company_code
- class Meta:
- verbose_name_plural = "companies"
- def L2update_last_login(sender, l2user, **kwargs):
- """
- A signal receiver which updates the last_login date for
- the user logging in.
- """
- l2user.last_login = timezone.now()
- l2user.save()
- #user_logged_in.connect(update_last_login)
- class SiteProfileNotAvailable(Exception):
- pass
- class L2UserManager(models.Manager):
- @classmethod
- def normalize_email(cls, email):
- """
- Normalize the address by lowercasing the domain part of the email
- address.
- """
- email = email or ''
- try:
- email_name, domain_part = email.strip().rsplit('@', 1)
- except ValueError:
- pass
- else:
- email = '@'.join([email_name, domain_part.lower()])
- return email
- def create_l2user(self, l2company, username, email=None, password=None):
- """
- Creates and saves a User with the given username, email and password.
- """
- now = timezone.now()
- if not username:
- raise ValueError('The given username must be set')
- if not l2company:
- raise ValueError('The given Comnpany Code must be set')
- email = L2UserManager.normalize_email(email)
- l2user = self.model(username=username, email=email,
- is_staff=False, is_active=True, is_superuser=False,
- last_login=now, date_joined=now,l2Company=l2company)
- l2user.set_password(password)
- l2user.save(using=self._db)
- return l2user
- def create_superuser(self, l2company, username, email, password):
- u = self.create_l2user(l2company, username, email, password)
- u.is_staff = True
- u.is_active = True
- u.is_superuser = True
- u.save(using=self._db)
- return u
- def make_random_password(self, length=10,
- allowed_chars='abcdefghjkmnpqrstuvwxyz'
- 'ABCDEFGHJKLMNPQRSTUVWXYZ'
- '23456789'):
- """
- Generates a random password with the given length and given
- allowed_chars. Note that the default value of allowed_chars does not
- have "I" or "O" or letters and digits that look similar -- just to
- avoid confusion.
- """
- return get_random_string(length, allowed_chars)
- def get_by_natural_key(self, username):
- return self.get(username=username)
- # A few helper functions for common logic between User and AnonymousUser.
- class L2User(models.Model):
- """
- Users within the Django authentication system are represented by this
- model.
- Username and password are required. Other fields are optional.
- """
- l2company=models.ForeignKey(L2Company)
- username = models.CharField(_('username'), max_length=30, blank=False,
- help_text=_('Required. 30 characters or fewer. Letters, numbers and '
- '@/./+/-/_ characters'))
- first_name = models.CharField(_('first name'), max_length=30, blank=True)
- last_name = models.CharField(_('last name'), max_length=30, blank=True)
- email = models.EmailField(_('e-mail address'), blank=True)
- password = models.CharField(_('password'), max_length=128)
- is_staff = models.BooleanField(_('staff status'), default=False,
- help_text=_('Designates whether the user can log into this admin '
- 'site.'))
- is_active = models.BooleanField(_('active'), default=True,
- help_text=_('Designates whether this user should be treated as '
- 'active. Unselect this instead of deleting accounts.'))
- is_superuser = models.BooleanField(_('superuser status'), default=False,
- help_text=_('Designates that this user has all permissions without '
- 'explicitly assigning them.'))
- last_login = models.DateTimeField(_('last login'), default=timezone.now)
- date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
- groups = models.ManyToManyField(L2Group, verbose_name=_('groups'),
- blank=True, help_text=_('The groups this user belongs to. A user will '
- 'get all permissions granted to each of '
- 'his/her group.'))
- user_permissions = models.ManyToManyField(Permission,
- limit_choices_to = {'isdelegate': True},
- verbose_name=_('user permissions'), blank=True,
- help_text='Specific permissions for this user.')
- objects = L2UserManager()
- class Meta:
- verbose_name = _('l2user')
- verbose_name_plural = _('users')
- unique_together = (('username', 'l2company'),)
- def __unicode__(self):
- return self.username
- def natural_key(self):
- return (self.username,)
- def get_absolute_url(self):
- return "/%s/users/%s/" % (urllib.quote(smart_str(self.l2company)),
- urllib.quote(smart_str(self.username)))
- def is_anonymous(self):
- """
- Always returns False. This is a way of comparing User objects to
- anonymous users.
- """
- return False
- def is_authenticated(self):
- """
- Always return True. This is a way to tell if the user has been
- authenticated in templates.
- """
- return True
- def get_full_name(self):
- """
- Returns the first_name plus the last_name, with a space in between.
- """
- full_name = u'%s %s' % (self.first_name, self.last_name)
- return full_name.strip()
- def set_password(self, raw_password):
- self.password = make_password(raw_password)
- def check_password(self, raw_password):
- """
- Returns a boolean of whether the raw_password was correct. Handles
- hashing formats behind the scenes.
- """
- def setter(raw_password):
- self.set_password(raw_password)
- self.save()
- return check_password(raw_password, self.password, setter)
- def set_unusable_password(self):
- # Sets a value that will never be a valid hash
- self.password = make_password(None)
- def has_usable_password(self):
- return is_password_usable(self.password)
- def get_group_permissions(self, obj=None):
- """
- Returns a list of permission strings that this user has through his/her
- groups. This method queries all available auth backends. If an object
- is passed in, only permissions matching this object are returned.
- """
- permissions = set()
- for backend in auth.get_backends():
- if hasattr(backend, "get_group_permissions"):
- if obj is not None:
- permissions.update(backend.get_group_permissions(self,
- obj))
- else:
- permissions.update(backend.get_group_permissions(self))
- return permissions
- def get_all_permissions(self, obj=None):
- return _user_get_all_permissions(self, obj)
- def has_perm(self, perm, obj=None):
- """
- Returns True if the user has the specified permission. This method
- queries all available auth backends, but returns immediately if any
- backend returns True. Thus, a user who has permission from a single
- auth backend is assumed to have permission in general. If an object is
- provided, permissions for this specific object are checked.
- """
- # Active superusers have all permissions.
- if self.is_active and self.is_superuser:
- return True
- # Otherwise we need to check the backends.
- return _user_has_perm(self, perm, obj)
- def has_perms(self, perm_list, obj=None):
- """
- Returns True if the user has each of the specified permissions. If
- object is passed, it checks if the user has all required perms for this
- object.
- """
- for perm in perm_list:
- if not self.has_perm(perm, obj):
- return False
- return True
- def has_module_perms(self, app_label):
- """
- Returns True if the user has any permissions in the given app label.
- Uses pretty much the same logic as has_perm, above.
- """
- # Active superusers have all permissions.
- if self.is_active and self.is_superuser:
- return True
- return _user_has_module_perms(self, app_label)
- def email_user(self, subject, message, from_email=None):
- """
- Sends an email to this User.
- """
- send_mail(subject, message, from_email, [self.email])
- def get_profile(self):
- """
- Returns site-specific profile for this user. Raises
- SiteProfileNotAvailable if this site does not allow profiles.
- """
- if not hasattr(self, '_profile_cache'):
- from django.conf import settings
- if not getattr(settings, 'AUTH_PROFILE_MODULE', False):
- raise SiteProfileNotAvailable(
- 'You need to set AUTH_PROFILE_MODULE in your project '
- 'settings')
- try:
- app_label, model_name = settings.AUTH_PROFILE_MODULE.split('.')
- except ValueError:
- raise SiteProfileNotAvailable(
- 'app_label and model_name should be separated by a dot in '
- 'the AUTH_PROFILE_MODULE setting')
- try:
- model = models.get_model(app_label, model_name)
- if model is None:
- raise SiteProfileNotAvailable(
- 'Unable to load the profile model, check '
- 'AUTH_PROFILE_MODULE in your project settings')
- self._profile_cache = model._default_manager.using(
- self._state.db).get(user__id__exact=self.id)
- self._profile_cache.user = self
- except (ImportError, ImproperlyConfigured):
- raise SiteProfileNotAvailable
- return self._profile_cache
Advertisement
Add Comment
Please, Sign In to add comment