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

托马斯·雅各布森(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

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

有权访问门户的用户列表

来自分类Dev

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

来自分类Dev

PHP验证用户有权访问内容

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

检查用户是否具有权限

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

NSMutableArray对象所有权

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

    有权访问门户的用户列表

  10. 10

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

  11. 11

    PHP验证用户有权访问内容

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

    检查用户是否具有权限

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

    NSMutableArray对象所有权

  22. 22

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

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

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

  27. 27

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

  28. 28

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

  29. 29

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

热门标签

归档