微搭低代码中的权限控制

Posted 低代码布道师

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了微搭低代码中的权限控制相关的知识,希望对你有一定的参考价值。

我们在开发小程序的时候,不得不考虑一个问题,用户的权限控制。某些模块只希望管理员看到,某些模块是公开的。那么如何做到识别管理员,如何去控制模块权限呢?这就是本期要解决的问题,微搭低代码中如何实现权限过滤。

微搭中的内外部用户介绍

我们先看一下微搭是如何区分用户的,在用户模块,分为内部用户和外部用户

内部用户可以自己添加,外部用户就是指匿名访客

我的小程序自从上线以后已经有2500人访问过,还是不少的。但是匿名访客最大的问题是这里的uuid虽然唯一,但是没有和我们的业务数据关联,所以通过匿名访客去做权限过滤是不现实的。

我们在用户登录注册环节保留了用户的信息,其实可以顺着这个思路来实现权限的过滤。我们可以给用户表增加一个权限字段,然后用户注册后由管理员主动选择哪个用户成为管理员,这样就解决了权限的问题。

为了便于选择,我们先添加一个通用选项集,角色,来区分是普通用户还是管理员


我这里只是设计了两类角色,你可以根据需要自己添加,比如运营人员、普通员工、经理、供应商、主管等。

通用选项集设置好后,我们可以给用户表添加一个字段,字段类型为枚举,枚举我设置为单选,暂时只考虑一个人只有一种身份

数据源设置好之后,我们在用户注册那块增加一个字段,默认角色给他普通用户的身份

export default async function(event, data) 
    console.log(event)
    const result = await app.cloud.callModel(
        name: 'user_uzynu99',
        methodName: 'wedaCreate',
        params: 
            nickname:event.detail.nickName,
            usericon:event.detail.avatarUrl,
            openid:app.dataset.state.openid,
            role:"1"
        , // 方法入参
    );

创建全局变量来控制用户是否注册

这样就让用户有了角色信息。角色设置好之后,还需要考虑一个问题是,小程序每次进来都需要点击登录按钮么?是不是我获取了之后以后就直接显示就可以了。

解决这个问题其实可以定义三个全局变量,分别是用户的头像、昵称和是否是注册用户来解决。



用户是否注册的逻辑实现

变量定义好之后,我们需要考虑这三个变量如何初始化的问题。每一个用户都有一个唯一标识openid,在小程序启动的时候我们就可以通过自定义连接器去获取到,然后我们在登录的时候也把这个信息保存到了数据源中。那么就可以通过用户的openid来获取数据源中用户的信息。

/**
 * 可通过 app 获取或修改全局应用的 变量 状态 等信息
 * 具体可以console.info 在编辑器Console面板查看更多信息
 * 如果需要 async-await,请在方法前 async 
 **/
export default 
  async onAppLaunch(launchOpts) 
    //console.log('---------> LifeCycle onAppLaunch', launchOpts)
    const result = await app.cloud.callConnector(
      name: 'getuserinfo_8yjxd1q',
      methodName: 'getopenid',
      params: , // 方法入参
    );
    console.log(result.openid)
    app.dataset.state.openid = result.openid
    const user = await app.cloud.callModel(
      name: 'user_uzynu99',
      methodName: 'wedaGetRecords',
      params: 
        "where": [
          
            "key": "openid",
            "rel": "eq",
            "val": result.openid
          
        ]
      , // 方法入参
    );
    if(user.records.length==0)
      app.dataset.state.isregister = false
    else
      app.dataset.state.isregister = true
      app.dataset.state.usericon = user.records[0].usericon
      app.dataset.state.nickname = user.records[0].nickname
      app.dataset.state.role = user.records[0].role
      
    
  ,
  onAppShow(appShowOpts) 
    //console.log('---------> LifeCycle onAppShow', appShowOpts)
  ,
  onAppHide() 
    //console.log('---------> LifeCycle onAppHide')
  ,
  onAppError(options) 
    //console.log('---------> LifeCycle onAppError', options)
  ,
  onAppPageNotFound(options) 
    //console.log('---------> LifeCycle onAppPageNotFound', options)
  ,
  onAppUnhandledRejection(options) 
    //console.log('---------> LifeCycle onAppUnhandledRejection', options)
  

我们这里获取用户信息是通过数据源的查询列表实现,查询列表的查询条件我们通过where来构造

const user = await app.cloud.callModel(
      name: 'user_uzynu99',
      methodName: 'wedaGetRecords',
      params: 
        "where": [
          
            "key": "openid",
            "rel": "eq",
            "val": result.openid
          
        ]
      , // 方法入参
    );

他有三个元素组成,key代表查询条件,rel代表关系,val代表值。

用户是否已经注册是根据查询出几条记录来决定的,如果返回的数组等于0表示当前用户还没有注册,如果大于0就表示注册过,那么我们就返回数组的第一条记录,分别调用属性赋值给全局变量。

控制头像是否显示

在我的模块,我们考虑来控制头像是否显示,如果是注册用户就直接显示用户头像和昵称,如果未注册过,就显示默认头像和登录按钮。

在低代码中有这种控制显示逻辑的,一般组件上可以绑定条件展示,我们这里通过全局变量中是否注册这个变量来控制


那要如何绑定呢?可以使用表达式绑定

!app.dataset.state.isregister

这个这个叹号是什么意思?叹号是取反的意思,未注册的时候变量值是false,一取反就变成了true,那么就显示登录按钮。

在第二组容器里,我们的表达式就绑定成app.dataset.state.isregister,意思这个变量为真时再显示,这样就实现了根据变量的值显示不同的内容的效果

总结

我们本篇主要是介绍了如何设计小程序中的用户的权限信息,利用权限可以控制不同人员看到的模块不一样,也方便管理。后续我们会以这个电商为例子,逐步展开微搭中的各个知识点的介绍,敬请期待。

以上是关于微搭低代码中的权限控制的主要内容,如果未能解决你的问题,请参考以下文章

微搭低代码从入门到精通08-轮播容器

微搭低代码零基础入门课(第四课)

实战 | 使用微搭低代码3分钟开发表单应用

微搭低代码JavaScript基础知识-循环和条件控制

微搭低代码JavaScript基础知识-循环和条件控制

微搭低代码JavaScript基础知识-循环和条件控制