我有一个网站,用户可以拥有多个角色(通常用户将拥有多个角色)。我想要做的只是添加和删除用户角色。
html方面非常简单。我有一个选择2多选框,可以加载所有可能的用户角色。我选择或取消选择角色,然后提交。
表单只有2个变量;用户名和角色
我有一个简单的for循环if语句,但我似乎有2个问题。 1由于某种原因,if语句永远不会是'True'。第二个问题是for循环似乎退出它评估1变量而不是实际循环遍历所有变量。
formroleadmin = AdminUserRoles() # if roles administered
if formroleadmin.roles.data and formroleadmin.validate(): #if form is submitted
# ar = all roles er = existing roles ur = updated roles
allroles = usersRolesNames.query.all() #query all possible roles
usr = formroleadmin.username.data #submitted user name
ur = formroleadmin.roles.data #load the submitted roles
er = usersRoles.query.filter_by(username_fk=usr).all() #get current user roles
for ar in allroles: #loop through all possible roles
if ar in ur: # if the role is a submitted role
if ar not in er: # if role does not exist add it #if role is not assigned
db.session.add(usersRoles(username_fk=usr, role_fk=ar)) #add user
db.session.commit()
elif ar not in ur: # remove it if exists #if not a submitted role
if ar in er: # remove if user is assigned role remove permission
db.session.filter_by(username_fk=usr, role_fk=ar).delete
内容示例
allroles = ['Admin', 'Completions', 'Completions RW', 'Operations'
ur = ['Completions', 'Operations']
所以我尝试做的基本顺序是遍历allroles(ar)并针对ur测试每个值。如果角色存在或不存在,那么它将被添加,删除或传递等。
答案 0 :(得分:0)
通过在迭代的变量周围添加str()来解决这个问题。 @LoganBertram给了我建议来跟踪这个错误。下面列出了更新的代码(日志记录和故障排除是在iPython中完成的)。
记录已添加
import logging
logging.basicConfig(level=logging.DEBUG)
for u in ar:
if u in ur:
logging.debug('found u {} ur {}'.format(u, ur))
else:
logging.debug('not found u {} ur {}'.format(u, ur))
DEBUG:root:not found u Admin ur ['Admin', 'Completions']
DEBUG:root:not found u Completions ur ['Admin', 'Completions']
我将代码更改为此内容;
for u in ar:
if str(u) in ur:
logging.debug('found u {} ur {}'.format(u, ur))
else:
logging.debug('not found u {} ur {}'.format(u, ur))
并得到了这个结果
DEBUG:root:found u Admin ur ['Admin', 'Completions']
DEBUG:root:found u Completions ur ['Admin', 'Completions']