检查用户是否有权访问对象

托马斯·雅各布森(Tomas Jacobsen)

我想根据成员包检查user.profile是否具有查看所有利益对象的权限。(如果用户没有访问权限,则他应该能够看到对象的某些字段(名称和包)

如果用户具有memberpackagePackage1并正在查看中的权益,则Package1他应该能够看到该body字段。如果用户具有memberpackage,则Package2他应该看不到该body字段。

这可能吗?也许这可以通过templatetag来完成?{% if user_has_access_to_benfit %}它会返回true或false。

像这样的东西:

{{ object.name }}

{% if user_has_access_to_benfit %}
    {{ object.body }}
{% else %}
    <p>Sorry! You don't have access to this object.</p>
{% endif %}

--

这是我根据答案尝试过的方法:

class Profile(models.Model):
    user = models.OneToOneField(User)
    memberpackage = models.ForeignKey(Package, blank=True, null=True)



class Package(models.Model):
    name = models.CharField(max_length=200)    

class Benefit(models.Model):
    PUBLISHED = 'P'
    DRAFT = 'U'
    PULLED = 'X'
    name = models.CharField(max_length=200)
    body = models.TextField(blank=True, null=True, help_text="Only visible to those members in the same memberpackage")    
    package = models.ManyToManyField(Package, blank=True, null=True, related_name="in_package")
    status = models.CharField(max_length=1, choices=STATUS_CHOICES, default=DRAFT)    



    def is_viewable_by(self, user):
        return self.package.filter(id=user.profile.memberpackage_id).exists()                

编辑:

如果我这样做(受益方为B资本)

#View for listing one benefit
class BenefitDetailView(DetailView):

    template_name_field = 'template_name'

    model = Benefit        

    queryset = Benefit.objects.exclude(status="X")


    def get(self, request, *args, **kwargs):
        if request.user.is_authenticated():
            context['user_has_access_to_benfit'] = Benefit.is_viewable_by(request.user)

我收到此错误:

unbound method is_viewable_by() must be called with Benefit instance as first argument (got User instance instead)

编辑2:

尝试另一种方式

#View for listing one benefit
class BenefitDetailView(DetailView):

    template_name_field = 'template_name'

    model = Benefit

    queryset = Benefit.objects.exclude(status="X")


    def get(self, request, *args, **kwargs):
        if request.user.is_authenticated():
            user_has_access_to_benfit = Benefit.objects.filter(package = request.user.profile.memberpackage).exists() #Hoping this function returns true or false
        #The user is not logged in, user_has_access_to_benfit should be set to False
        else:
            user_has_access_to_benfit = False

    def get_context_data(self, **kwargs):
        # Call the base implementation first to get a context
        context = super(BenefitDetailView, self).get_context_data(**kwargs)
        # Add in a extra context
        context['user_has_access_to_benfit'] = user_has_access_to_benfit
        return context

但是我得到了错误: The view app.views.BenefitDetailView didn't return an HttpResponse object.

不知道是否有另一种进入request.user.is_authenticated()DetailView的方法吗?

n

在您的Benefit课程中:

Benefit(models.Model):
  ...
  def is_viewable_by(self, user):
      return self.package.filter(id=user.profile.memberpackage_id).exists()

在您的BenefitDetailView课程中:

BenefitDetailView(DetailView):
  def get_context_data(self, **kwargs):
    context = super(BenefitDetailView, self).get_context_data(**kwargs)
    if self.object and self.request.user.is_authenticated():
      context.update({ 'has_benefit_access': self.object.is_viewable_by(self.request.user)})
    return context

is_viewable_by实例方法(而不是类方法)一样,您需要在的实例上调用它Benefitself.object是您要使用的实例。request对象在Viewas的每个子类中均可用self.request

如果不是每个通过身份验证的用户都具有关联的配置文件,请记住这is_viewable_by将引发ObjectDoesNotExist需要捕获异常。

在这种情况下,绝对不需要重写该get方法,但是如果这样做,则需要返回一个HttpResponse对象。确保这一点的最简单方法是返回超类的get方法的值

class BenefitDetailView(DetailView):
  def get(self, request, *args, **kwargs):
    # ***do stuff***
    return super(BenefitDetailView, self).get(request, *args, **kwargs)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MVC-验证-ViewModel是否有权访问数据库

来自分类Dev

如何检查谁有权访问SQL Server中的对称密钥

来自分类Dev

如何编写一个Mixin来检查登录用户是否有权访问某些模型实例

来自分类Dev

是否可以列出我有权访问的所有AWS S3存储桶?

来自分类Dev

制定一个mysqli查询,列出列出具有单独表的组,以确定用户是否有权访问视图组

来自分类Dev

c#-如何检查当前登录的用户是否有权访问Sharepoint 2013中的页面

来自分类Dev

检查用户是否有权访问实体的最佳方法是什么

来自分类Dev

是否可以在没有root用户访问权限的情况下更改文件的所有权?

来自分类Dev

如何使用boto3在aws中检查s3访问密钥是否有权访问特定存储桶

来自分类Dev

Angular-无法获得当前用户的警卫角色来检查他/她是否有权访问受保护的路由

来自分类Dev

Azure AD B2C选择Web应用程序用户有权访问

来自分类Dev

如何使用Azure DevOps API列出有权访问项目存储库的组/用户?

来自分类Dev

是否有理由分叉我有权访问的组织存储库?

来自分类Dev

检查用户是否具有权限

来自分类Dev

系统应用程序是否有权访问/ system目录?

来自分类Dev

是否可以在没有root用户访问权限的情况下更改文件的所有权?

来自分类Dev

检查用户是否有权访问Yii RBAC中的操作

来自分类Dev

NSMutableArray对象所有权

来自分类Dev

制定一个mysqli查询,该查询列出了具有单独表的组,这些表用于确定用户是否有权访问视图组

来自分类Dev

首页> C#>如何检查当前登录的用户是否有权访问Sharepoint 2013中的页面

来自分类Dev

用户是否有权在/ home / userDir之外写?

来自分类Dev

PHP验证用户有权访问内容

来自分类Dev

检查用户是否有权访问实体的最佳方法是什么

来自分类Dev

获取所有有权访问协作的用户/组:BOX API

来自分类Dev

由于单独的线程所有权,调用线程无法访问对象

来自分类Dev

Spring Security-如何检查用户是否有权访问自己的资源?

来自分类Dev

列出用户有权访问的文件和目录

来自分类Dev

有权访问门户的用户列表

来自分类Dev

如何根据用户的角色检查用户是否有权访问页面

Related 相关文章

  1. 1

    MVC-验证-ViewModel是否有权访问数据库

  2. 2

    如何检查谁有权访问SQL Server中的对称密钥

  3. 3

    如何编写一个Mixin来检查登录用户是否有权访问某些模型实例

  4. 4

    是否可以列出我有权访问的所有AWS S3存储桶?

  5. 5

    制定一个mysqli查询,列出列出具有单独表的组,以确定用户是否有权访问视图组

  6. 6

    c#-如何检查当前登录的用户是否有权访问Sharepoint 2013中的页面

  7. 7

    检查用户是否有权访问实体的最佳方法是什么

  8. 8

    是否可以在没有root用户访问权限的情况下更改文件的所有权?

  9. 9

    如何使用boto3在aws中检查s3访问密钥是否有权访问特定存储桶

  10. 10

    Angular-无法获得当前用户的警卫角色来检查他/她是否有权访问受保护的路由

  11. 11

    Azure AD B2C选择Web应用程序用户有权访问

  12. 12

    如何使用Azure DevOps API列出有权访问项目存储库的组/用户?

  13. 13

    是否有理由分叉我有权访问的组织存储库?

  14. 14

    检查用户是否具有权限

  15. 15

    系统应用程序是否有权访问/ system目录?

  16. 16

    是否可以在没有root用户访问权限的情况下更改文件的所有权?

  17. 17

    检查用户是否有权访问Yii RBAC中的操作

  18. 18

    NSMutableArray对象所有权

  19. 19

    制定一个mysqli查询,该查询列出了具有单独表的组,这些表用于确定用户是否有权访问视图组

  20. 20

    首页> C#>如何检查当前登录的用户是否有权访问Sharepoint 2013中的页面

  21. 21

    用户是否有权在/ home / userDir之外写?

  22. 22

    PHP验证用户有权访问内容

  23. 23

    检查用户是否有权访问实体的最佳方法是什么

  24. 24

    获取所有有权访问协作的用户/组:BOX API

  25. 25

    由于单独的线程所有权,调用线程无法访问对象

  26. 26

    Spring Security-如何检查用户是否有权访问自己的资源?

  27. 27

    列出用户有权访问的文件和目录

  28. 28

    有权访问门户的用户列表

  29. 29

    如何根据用户的角色检查用户是否有权访问页面

热门标签

归档