30分钟搭建企业级角色权限系统:Layui权限控制实战指南

30分钟搭建企业级角色权限系统:Layui权限控制实战指南

【免费下载链接】layui 【免费下载链接】layui 项目地址: https://gitcode.com/gh_mirrors/lay/layui

你是否还在为权限系统开发效率低、代码复杂而烦恼?是否想快速搭建一个安全可靠的角色权限管理模块?本文将带你使用Layui框架,通过表格、树组件和表单的组合,在30分钟内完成一个企业级角色权限管理系统的核心功能。读完本文后,你将掌握:

  • 角色列表的展示与管理(基于Table组件)
  • 权限树形结构的构建与勾选(基于Tree组件)
  • 角色与权限的关联配置(基于Form组件)
  • 权限分配弹窗的设计与实现(基于Layer组件)

系统架构概览

权限管理系统通常包含用户管理、角色管理和权限管理三大模块。本文重点讲解角色与权限的关联配置,整体架构如下:

mermaid

在Layui中,我们可以利用以下组件实现这一架构:

  • 表格组件(Table):展示角色列表,支持增删改查操作
  • 树组件(Tree):以树形结构展示权限项,支持勾选操作
  • 表单组件(Form):处理权限分配的表单提交
  • 弹出层组件(Layer):实现权限分配的弹窗交互

角色列表实现(Table组件)

角色列表是权限系统的基础,用于展示和管理系统中的角色信息。我们将使用Layui的Table组件来实现这一功能。

核心代码实现

<table id="roleTable"></table>

<script>
layui.use('table', function(){
  var table = layui.table;
  
  // 渲染角色表格
  table.render({
    elem: '#roleTable'
    ,url: 'json/table/demo1.json' // 实际项目中替换为后端接口
    ,toolbar: '#toolbarDemo' // 开启头部工具栏
    ,cols: [[
      {type: 'checkbox', fixed: 'left'}
      ,{field: 'id', title: '角色ID', width: 80, sort: true}
      ,{field: 'name', title: '角色名称', width: 120}
      ,{field: 'desc', title: '角色描述', minWidth: 150}
      ,{field: 'status', title: '状态', width: 80, templet: function(d){
        return d.status ? '<span class="layui-badge layui-bg-green">启用</span>' : '<span class="layui-badge">禁用</span>';
      }}
      ,{title: '操作', width: 150, align: 'center', toolbar: '#barDemo'}
    ]]
    ,page: true
    ,limit: 10
    ,height: 'full-200'
  });
  
  // 监听工具条事件
  table.on('tool(roleTable)', function(obj){
    var data = obj.data;
    if(obj.event === 'edit'){
      // 打开权限分配弹窗
      openPermissionDialog(data.id, data.name);
    }
  });
});
</script>

关键组件说明

  • 表格渲染:通过table.render()方法渲染角色表格,配置项包括数据源URL、列定义、分页等
  • 工具栏:通过toolbar参数启用头部工具栏,支持批量操作
  • 操作列:通过templet自定义操作按钮,绑定edit事件用于打开权限分配弹窗

完整的表格组件使用文档可参考:docs/table/index.md

权限树形结构(Tree组件)

权限通常具有层级关系,使用树形结构展示最为直观。Layui的Tree组件可以完美实现这一需求,并支持节点勾选功能。

核心代码实现

<div id="permissionTree"></div>

<script>
layui.use('tree', function(){
  var tree = layui.tree;
  
  // 渲染权限树
  tree.render({
    elem: '#permissionTree'
    ,data: permissionData // 权限数据,实际项目中从后端获取
    ,showCheckbox: true // 显示复选框
    ,id: 'permissionTreeId'
    ,accordion: true // 开启手风琴模式
    ,oncheck: function(obj){
      console.log(obj.data); // 打印选中的节点数据
    }
  });
  
  // 获取选中的权限节点
  function getCheckedPermissions(){
    return tree.getChecked('permissionTreeId');
  }
});
</script>

权限数据格式

权限树的数据格式如下,支持无限层级嵌套:

var permissionData = [{
  title: '系统管理',
  id: 1,
  checked: true,
  children: [{
    title: '用户管理',
    id: 101,
    children: [{
      title: '查看用户',
      id: 10101
    },{
      title: '新增用户',
      id: 10102
    }]
  },{
    title: '角色管理',
    id: 102,
    children: [{
      title: '查看角色',
      id: 10201
    },{
      title: '新增角色',
      id: 10202
    }]
  }]
}];

Tree组件的详细使用方法可参考:docs/tree/index.md

权限分配弹窗(Layer组件)

当点击角色列表中的"分配权限"按钮时,我们需要弹出一个包含权限树的弹窗,用于配置角色拥有的权限。这一功能将通过Layer组件实现。

弹窗实现代码

// 打开权限分配弹窗
function openPermissionDialog(roleId, roleName){
  layui.use(['layer', 'tree', 'form'], function(){
    var layer = layui.layer;
    var form = layui.form;
    
    // 加载权限数据(实际项目中从后端获取)
    var permissionData = getPermissionData(roleId);
    
    // 创建弹窗
    layer.open({
      type: 1,
      title: '分配权限 - ' + roleName,
      area: ['350px', '500px'],
      content: '<div id="permissionTree" style="padding: 20px;"></div>',
      success: function(layero, index){
        // 渲染权限树
        layui.tree.render({
          elem: '#permissionTree'
          ,data: permissionData
          ,showCheckbox: true
          ,id: 'permissionTree_' + roleId
        });
      },
      btn: ['确定', '取消'],
      yes: function(index, layero){
        // 获取选中的权限
        var checkedPermissions = layui.tree.getChecked('permissionTree_' + roleId);
        
        // 提交权限数据(实际项目中发送到后端)
        saveRolePermissions(roleId, checkedPermissions);
        
        layer.close(index);
      }
    });
  });
}

关键功能说明

  • 弹窗创建:使用layer.open()创建弹窗,设置标题、尺寸和内容
  • 权限树渲染:在弹窗成功打开的回调函数中渲染权限树
  • 权限提交:点击确定按钮后,通过tree.getChecked()方法获取选中的权限,提交到后端保存

Layer组件的更多用法可参考:docs/layer/index.md

权限表单提交(Form组件)

权限分配完成后,需要将角色与权限的关联关系提交到后端保存。这一过程将通过Form组件实现表单验证和提交。

表单提交实现

// 保存角色权限
function saveRolePermissions(roleId, permissions){
  layui.use('form', function(){
    var form = layui.form;
    var layer = layui.layer;
    
    // 构建提交数据
    var permissionIds = permissions.map(function(item){
      return item.id;
    });
    
    // 模拟表单提交
    form.on('submit(permissionSubmit)', function(data){
      // 实际项目中发送AJAX请求到后端
      $.ajax({
        url: '/api/role/' + roleId + '/permissions',
        type: 'POST',
        data: {permissionIds: permissionIds.join(',')},
        success: function(res){
          layer.msg('权限分配成功', {icon: 1});
          // 刷新角色表格
          layui.table.reload('roleTable');
        },
        error: function(){
          layer.msg('权限分配失败', {icon: 2});
        }
      });
      
      return false; // 阻止表单默认提交
    });
    
    // 触发表单提交
    $('#permissionForm').submit();
  });
}

Form组件的详细使用说明可参考:docs/form/index.md

完整页面布局

为了让权限系统有更好的用户体验,我们可以使用Layui的布局组件构建一个管理系统风格的页面框架。

管理系统布局示例

<div class="layui-layout layui-layout-admin">
  <!-- 头部区域 -->
  <div class="layui-header">
    <div class="layui-logo">权限管理系统</div>
    <!-- 头部导航 -->
  </div>
  
  <!-- 左侧菜单区域 -->
  <div class="layui-side layui-bg-black">
    <div class="layui-side-scroll">
      <ul class="layui-nav layui-nav-tree">
        <li class="layui-nav-item"><a href="user.html">用户管理</a></li>
        <li class="layui-nav-item layui-this"><a href="role.html">角色管理</a></li>
        <li class="layui-nav-item"><a href="permission.html">权限管理</a></li>
      </ul>
    </div>
  </div>
  
  <!-- 内容区域 -->
  <div class="layui-body">
    <div style="padding: 15px;">
      <!-- 角色表格和权限分配相关内容 -->
    </div>
  </div>
  
  <!-- 底部区域 -->
  <div class="layui-footer">
    权限管理系统 © 2023
  </div>
</div>

完整的布局示例可参考:examples/layout-admin.html

总结与展望

通过本文的介绍,我们使用Layui的Table、Tree、Layer和Form组件,快速构建了一个角色权限管理系统的核心功能。主要包括:

  1. 使用Table组件展示角色列表,支持增删改查操作
  2. 使用Tree组件以树形结构展示权限项,支持勾选操作
  3. 使用Layer组件实现权限分配弹窗,提供良好的交互体验
  4. 使用Form组件处理权限数据的提交和验证

这一系统架构具有良好的可扩展性,可以根据实际需求进一步完善:

  • 添加用户管理模块,实现用户-角色的关联
  • 增加权限细粒度控制,支持按钮级别的权限控制
  • 实现权限变更的日志记录,便于审计和追溯

希望本文能帮助你快速掌握Layui在权限系统开发中的应用,提高开发效率,构建安全可靠的权限管理模块。如果你有任何问题或建议,欢迎在评论区留言讨论。

项目仓库地址:https://gitcode.com/gh_mirrors/lay/layui

【免费下载链接】layui 【免费下载链接】layui 项目地址: https://gitcode.com/gh_mirrors/lay/layui

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值