接口平台(2)

权限管理

  1. 根据用户id或者权限列表内判定路由
  2. 路由交给权限函数进行判定是否有数据

前端

  1. 针对权限可以设置分组【CURD】

  2. admin用户可以看到现有所有路由采用textarea展示

  3. 普通用户进入此页则没有任何数据

    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
    // 进入mounted 
    // 1. 加载权限列表
    // 2. 所有用户,用于分组内选择用户【用户id+用户name+用户title】
    // 3. 所有路由,用户在dialog展示
    <el-dialog title="编辑权限" :visible.sync="dialogFormVisible">
    <el-form :model="form_data">
    <el-form-item label="权限ID" label-width="80px">
    <el-input disabled="" v-model="form_data.id" clearable="True"></el-input>
    </el-form-item>
    <el-form-item label="权限名称" label-width="80px">
    <el-input v-model="form_data.name" clearable=true></el-input>
    </el-form-item>
    <el-form-item label="监管路由" label-width="80px">
    <el-input v-model="form_data.path" clearable=true></el-input>
    </el-form-item>
    <el-form-item label="所属人员" label-width="80px">
    <el-select v-model="form_data.users" multiple placeholder="选择人员【可多选】" style="width: 100%">
    <el-option v-for="users in all_users"
    :key="users.id"
    :label="users.id + '-' + users.username + '-' + users.title"
    :value="users.id + '-' + users.username + '-' + users.title">

    </el-option>
    </el-select>
    </el-form-item>
    </el-form>


    <div slot="footer" class="dialog-footer">
    <el-button @click="dialogFormVisible = false">取 消</el-button>
    <el-button type="primary" @click="save_power">保 存</el-button>
    </div>
    </el-dialog>

后端

1
2
3
4
5
6
7
8
# 获取权限列表  get_power_list
# 判定是否是admin,不是直接返回空数据
res = {}
# 返回权限列表倒序--同时将[user1,user2] str - eval(str) -变为列表
# 查找所有用户的id,username,title
# 读取views文件,查找所有路由
# 以上所有全部塞到res内 json格式返回给前端
return HttpResponse(json.dumps(res), content_type='application/json')
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
# --------自定义权限判定函数----------
# 将所有的url统一管理,没必要管理的还在url文件里展示
# 1. 接口路由进来,首先判定是否中自定义权限,
p = list.objects.filter(path=path)
if p:
# 1.1 有此路由权限,则判断当前用户是否在权限组对应的用户id里面
users = [i for i in p.users]
# 1.1.1 用户id存在,则执行对应路由
if 当前登录用户id in users:
执行权限
# 1.1.2 用户id不存在,则返回没权限
else:
return HttpResponse("无权限")
# 2. 路由函数不存在与权限分组里面,则走自然权限
else:
return 自然权限函数

# -------自然权限函数---------
# 1. 如果路由函数有判断,比如删除权限,
# 1.1 可以对比当前用户id,和项目所属用户id,
# 1.2 相等则可以进行操作,不相等,提示无权限
if path == 'delete_project':
project_id = request.GET['project_id']
if request.user.id != project_manage.objects.filter(id=project_id)[0].creater:
return HttpResponse('没权限')
# 2. 否则,则全部可以执行
r = locals()
exec('r = %s(request)' % path)
return r['r']