Web服务器:在getter / setter(或属性)中检查用户的权限是否正确?

时间:2011-08-09 21:48:04

标签: python web-services permissions getter-setter

我正在开发一个简单的网络服务器,它通过XML处理与浏览器的通信。

为了确保变量的类型是正确的,我通过getter / setter包装了我的类中的(大多数)属性。类似的东西:

class Animal(object):
    def __init__(self):
        super(Animal, self).__init__()
        self.age = None

    def setAge(self, age):
        try:
            self._age = int(age)
        except TypeError:
            self._age = None

    def getAge(self):
        return self._age

    age = property(getAge, setAge)

服务器还有一个身份验证和权限系统(典型的登录/密码东西......)。

假设已登录的用户没有权限在服务器中设置动物的年龄,但是他正在尝试(有点像huacker,我们已经到了这里,因为javascript应该禁用'age'输入文字,但这是一个不同的问题)...回到这一点!:

现在,当我收到POST时,我会打开其中包含的XML,并检查是否有人试图设置他没有权限的内容。类似的东西:

def receivePOST(request):
    xmlTree = Utilities.getXMLTree(request.body)
    loggedUser = Utilities.getLoggedUser()

    if xmlTree.findtext("age") and not loggedUser.hasPermission("setAge"):
        raise Exception("User %s was trying to change the age!!" % loggedUser.userName)

(当然,在“真正的”服务器中有更多的方法,如果... elif ...因为有更多权限可以检查)

我想知道在getter / setter中进行权限检查是否是个好主意(主要是在setter中)。它必须是这样的:

class Animal(object):
    def __init__(self):
        super(Animal, self).__init__()
        self.age = None

    def setAge(self, age):
        if age is not None:
            loggedUser = Utilities.getLoggedUser()
            if loggedUser.hasPermission("setAge"):
                try:
                    self._age = int(age)
                except TypeError:
                    self._age = None
            else:
                raise Exception("User %s was trying to change the age!!" % loggedUser.userName)
        else:
            self._age = None

一方面,当你真正要做某事时,检查许可似乎是一个非常自然的地方。这也会以更加有效的方式“屏蔽”我服务器中的所有类(如果以某种方式设置“年龄”而不通过'receivePOST'方法会怎样?...没有权限检查那个案子)。另一方面,这意味着我只能在服务器环境中使用我的Animal类(我有'loggedUser')。

另外,我已经读过属性应该(理想情况下)保持简单,这不是一个很好的做法开始加载getters / setters的代码可能会导致很多副作用(有些人说很难代码读取时跟踪错误:myDuck.age = 512)

我不知道......你怎么看?

谢谢!

相关:

When and how to use the builtin function property() in python

Python @property versus method performance - which one to use?

0 个答案:

没有答案