Openstack Horizon(kilo)二次开发之匿名访问View

需要注意的是,这种方式不适用于class view.

  1. 修改horizon.base.require_auth:

    	def require_auth(view_func):
    	    """Performs user authentication check.
    
    	    Similar to Django's `login_required` decorator, except that this throws
    	    :exc:`~horizon.exceptions.NotAuthenticated` exception if the user is not
    	    signed-in.
    	    """
    	    from horizon.exceptions import NotAuthenticated  # noqa
    
    	    @functools.wraps(view_func, assigned=available_attrs(view_func))
    	    def dec(request, *args, **kwargs):
    	        #此处添加一个判断,如果view_func的public属性为True则跳过认证.
    	        if getattr(view_func,'public',False):
    	            return view_func(request, *args, **kwargs)
    	        if request.user.is_authenticated():
    	            return view_func(request, *args, **kwargs)
    	        raise NotAuthenticated(_("Please log in to continue."))
    	    return dec
    
  2. 修改horizon.base.require_perms:

    	def require_perms(view_func, required):
    	    from horizon.exceptions import NotAuthorized  # noqa
    	    # We only need to check each permission once for a view, so we'll use a set
    	    current_perms = getattr(view_func, '_required_perms', set([]))
    	    view_func._required_perms = current_perms | set(required)
    
    	    @functools.wraps(view_func, assigned=available_attrs(view_func))
    	    def dec(request, *args, **kwargs):
    	        #此处添加一个判断,如果view_func的public属性为True则跳过认证.
    	        if getattr(view_func,'public',False):
    	            return view_func(request, *args, **kwargs)
    	        if request.user.is_authenticated():
    	            if request.user.has_perms(view_func._required_perms):
    	                return view_func(request, *args, **kwargs)
    	        raise NotAuthorized(_("You are not authorized to access %s")
    	                            % request.path)
    
    	    # If we don't have any permissions, just return the original view.
    	    if required:
    	        return dec
    	    else:
    	        return view_func
    
    
  3. 给需要匿名访问的View设置属性public=True

    setattr(view_func,'public',True)

转载于:https://my.oschina.net/fmnisme/blog/527028

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值