forked from leancloud/python-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrole.py
More file actions
73 lines (56 loc) · 1.8 KB
/
Copy pathrole.py
File metadata and controls
73 lines (56 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# coding: utf-8
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
import re
import six
import leancloud
__author__ = 'asaka <lan@leancloud.rocks>'
class Role(leancloud.Object):
def __init__(self, name=None, acl=None):
super(Role, self).__init__()
if name:
self.set_name(name)
if acl is None:
acl = leancloud.ACL()
acl.set_public_read_access(True)
self.set_acl(acl)
@property
def name(self):
return self.get('name')
@name.setter
def name(self, name):
return self.set('name', name)
def get_name(self):
"""
获取 Role 的 name,等同于 role.get('name')
"""
return self.get('name')
def set_name(self, name):
"""
为 Role 设置 name,等同于 role.set('name', name)
"""
return self.set('name', name)
@property
def users(self):
return self.relation('users')
def get_users(self):
"""
获取当前 Role 下所有绑定的用户。
"""
return self.relation('users')
@property
def roles(self):
return self.relation('roles')
def get_roles(self):
return self.relation('roles')
def validate(self, attrs):
if 'name' in attrs and attrs['name'] != self.get_name():
new_name = attrs['name']
if not isinstance(new_name, six.string_types):
raise TypeError('role name must be string_types')
r = re.compile('^[0-9a-zA-Z\-_]+$')
if not r.match(new_name):
raise TypeError('role\'s name can only contain alphanumeric characters, _, -, and spaces.')
return super(Role, self).validate(attrs)