Kabiljan Tanaguzov
Kabiljan Tanaguzov

Reputation: 323

add permission to model

I have two models, abstract user and admin, linked onetoonefield. I want to add permissions for admin. I registered in meta permissions, but they are not saved or created in the database. What do I need to do? When I call

admin.has_perm ('MoveOnApp.register_partner')

I get the error

'Admin' object has no attribute 'has_perm'
class AbstractUser(AbstractBaseUser, PermissionsMixin):
    """Создал абстрактоного юзера от которого будут унаследованны остальные юзеры"""
    phone_number = models.CharField(
        _('phone number'),
        max_length=14,
        unique=True,
        help_text='Enter your phone number',
    )
    email = models.EmailField(_('email address'), blank=True, unique=True)
    created = models.DateTimeField(_('date joined'), default=datetime.datetime.now())
    USERNAME_FIELD = 'phone_number'
    EMAIL_FIELD = 'email'
    REQUIRED_FIELDS = ['email']
    objects = BaseManager()
    is_superuser = None

    class Meta:
        verbose_name = _('user')
        verbose_name_plural = _('users')

class Admin(models.Model):
    """Создаю модель администратора, наследованную от AbstractUser"""
    user = models.OneToOneField(AbstractUser, on_delete=models.CASCADE, primary_key=True)
    company_name = models.CharField(
        _('company name'),
        max_length=150,
    )
    logo_url = models.ImageField(
        upload_to='img/logo'
    )
    first_name = models.CharField(
        _('first name'),
        max_length=50
    )
    last_name = models.CharField(
        _('last name'),
        max_length=50,
    )
    # Флажок, такие права доступа рекомендует делать документация. Есть еще варианты но этот мне кажется самым удобным
    is_admin = models.BooleanField(
        _('admin status'),
        default=True
    )
    objects = BaseManager()

    class Meta:
        permissions = (
            ("register_partner", "Can register partner"),
        )

Upvotes: 1

Views: 214

Answers (1)

high-rolls
high-rolls

Reputation: 86

Your Admin model is a basic model that has a user, but is not an user itself, to access its user-related properties you need to access the user attribute, like admin.user.has_perm().

Upvotes: 1

Related Questions