公司或网站的正常运行,离不开管理员对各个员工的合理分配,那先看看权限管理中的角色管理好了:

要更改用户的角色,那么先来理一下思路:

(1)用户现在是什么角色?

(2)用户将要成为什么角色?

(3)怎样更改用户的角色?

首先会用到的三张表:user表,userinjs表,juese表

第一步:遍历输出所有的用户

             <h2>更改用户角色</h2>
<!--将所有员工遍历出来-->
<p>员工列表:</p>
<select id="user"> <!--此处用id,和value进行传值-->
<?php
require "../DB.class.php";
$db = new DB();
$sql = "select * from users";
$arr = $db->query($sql);
foreach($arr as $v)
{
echo "<option value= '{$v[0]}'>{$v[2]}</optiop>";
}
?>
</select><br />

  这样可以实现如下效果:

第二步:将所有权限遍历输出

             <!--从数据库读取角色-->
<p>员工角色:</p>
<?php
$sql2 = "select * from juese ";
$arr2 = $db->query($sql2);
foreach($arr2 as $n)
{
echo "<input type='checkbox' class='ck' value='{$n[0]}'/>{$n[1]}";
}
?> <br />

 效果图如下:

 

第三步:当点击某用户时,显示他现在的角色

(1)

$("#user").change(function(){
var uid = $("#user").val();
$.ajax({
url:"chuli.php",
data:{uid:uid},
type:"POST",
dataType:"TEXT",
success:function(data){
// alert(data);
//用strquery类返回的,所以此处先拆分字符串
var jsid = data.trim().split("|");
// alert(jsid);
//取所有的复选框(属于jQuery对象)
var ck = $(".ck");
//清一下复选框的状态,jquery 支持这样全部清除;如果不清除状态,上次选中的会影响此次结果
ck.prop("checked",false);
for(var i=0;i<ck.length;i++)
{
//.eq()取到的是dom对象
var v= ck.eq(i).val();
//判断v是否在返回的jsid中
// alert(jsid.indexOf(v)>=0); if(jsid.indexOf(v)>=0)
{
//如果存在,则选中
ck.eq(i).prop("checked",true);
}
}
}
})
})

 这样,点击李四,显示李四的角色;点击王五,显示王五的角色

但是 ,这样会有bug,当刷新页面时,会如下图一样,没有默认值,那该怎么办呢?----封装函数,在刷新的时候调用一下

(2)封装后

<script type="text/javascript">
sel();//页面刷新调用
$("#user").change(function(){
sel();//下拉选框变化调用
}) //封装函数
function sel(){
var uid = $("#user").val();
$.ajax({
url:"chuli.php",
data:{uid:uid},
type:"POST",
dataType:"TEXT",
success:function(data){
var jsid = data.trim().split("|");
var ck = $(".ck"); ck.prop("checked",false);
for(var i=0;i<ck.length;i++)
{ var v= ck.eq(i).val(); if(jsid.indexOf(v)>=0)
{ ck.eq(i).prop("checked",true);
}
}
}
})
} </script>

第四步:更改用户角色,点击“确认更改”完成更改

(1)添加“确认更改”按钮

	<input type="button" value="确认更改" id="qr"/>

(2)代码

//更改角色
$("#qr").click(function(){ var uid = $("#user").val(); //造一个空字符串,将选中的复选框拼成字符串,用逗号分隔
var str = "";
var ck = $(".ck");
for(var i=0; i<ck.length;i++)
{
if (ck.eq(i).prop("checked"))
{
str = str+ck.eq(i).val()+",";
}
} //拼完的字符串会多一个逗号,用截取字符串的方法去逗号
str = str.substr(0,str.length-1);
alert(str);
$.ajax({
url:"del-add.php",
data:{uid:uid,jsid:str},
type:"POST",
dataType:"TEXT",
success: function(data){
alert("保存成功!");
}
});
})

  这样就可以实现更改角色的功能了,那么来看一下效果:

更改前的页面和数据库:

 

更改后页面的数据库:

 最后:chuli.php页面和del-add.php页面

chuli.php

<?php
$uid =$_POST["uid"];
require "../DB.class.php";
$db = new DB();
$sql = "select jsid from userinjs where uid='{$uid}'";
echo $db->strquery($sql);
?>

  

del-add.php:

<?php
$uid = $_POST["uid"];
$jsid = $_POST["jsid"];
require "../DB.class.php";
$db = new DB();
//清空原有角色
$sql = "delete from userinjs where uid='{$uid}'";
$db->query($sql,0);
//添加选中的角色
$jsid = explode(",",$jsid);
foreach($jsid as $v)
{
$sql = "insert into userinjs values('','{$uid}','{$v}')";
$db->query($sql,0);
}
?>

简单的角色管理就实现了~~~离第二阶段项目又近了~~~

网站权限管理 之 角(jue)色管理的更多相关文章

  1. Asp.Net Core 项目实战之权限管理系统(6) 功能管理

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  2. [译]MVC网站教程(二):异常管理

    介绍 “MVC网站教程”系列的目的是教你如何使用 ASP.NET MVC 创建一个基本的.可扩展的网站. 1)   MVC网站教程(一):多语言网站框架 2)   MVC网站教程(二):异常管理 3) ...

  3. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(10)- VSS源代码管理

    原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(10)- VSS源代码管理 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    ( ...

  4. PageAdmin CMS网站建设教程:如何创建及管理栏目?

    PageAdmin CMS网站制作教程:如何创建及管理栏目?1.登录管理后台后,在顶部导航中找到网站,并点击: 2.在左侧栏目中找到栏目管理,并点击: 3.进入到栏目管理页面,在顶部找到菜单,点击添加 ...

  5. 基于easyUI实现权限管理系统(三)——角色管理

    此文章是基于 EasyUI+Knockout实现经典表单的查看.编辑 一. 相关文件介绍 1. role.jsp:角色管理界面 <!DOCTYPE html PUBLIC "-//W3 ...

  6. 使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理

    原文:使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理 摘要 通过对博客文章的管理,实现外键操作. 目录[-] 八.博客文章管理 1.查看文章 2.添加博客        3 ...

  7. Linux基础_网站权限规划

    Linux系统默认的权限: 对于文件来说, 默认的权限: rw-r--r-- 644 对于目录来说:rwxr-xr-x  755 网站比较安全的权限: 网址程序存放在/app/blog 目录下面. 1 ...

  8. Linux 文件与目录管理,Linux系统用户组的管理

      一.Linux 文件与目录管理 我们知道Linux的目录结构为树状结构,最顶级的目录为根目录 /. 其他目录通过挂载可以将它们添加到树中,通过解除挂载可以移除它们. 在开始本教程前我们需要先知道什 ...

  9. Spring AOP /代理模式/事务管理/读写分离/多数据源管理

    参考文章: http://www.cnblogs.com/MOBIN/p/5597215.html http://www.cnblogs.com/fenglie/articles/4097759.ht ...

  10. Spring学习8-Spring事务管理(编程式事务管理)

    一.Spring事务的相关知识   1.事务是指一系列独立的操作,但在概念上具有原子性. 比如转账:A账号-100, B账号+100,完成.这两个操作独立是没问题的. 但在逻辑上,要么全部完成,要么一 ...

随机推荐

  1. poj 3270 Cow Sorting (置换入门)

    题意:给你一个无序数列,让你两两交换将其排成一个非递减的序列,每次交换的花费交换的两个数之和,问你最小的花费 思路:首先了解一下什么是置换,置换即定义S = {1,...,n}到其自身的一个双射函数f ...

  2. css实现超出部分用...代替

    如果是一行的话 css为 white-space: nowrap: 保证文本内容不会自动换行,如果多余的内容会在水平方向撑破单元格. overflow: hidden: 隐藏超出单元格的部分. tex ...

  3. Android 开发之错误整理 [2014-04-28 09:22:28 - XXXX] Unable to resolve target 'android-18'

    在开发的时候难免会导入项目,那么怎么经常会遇到这个错误: [2014-04-28 09:22:28 - XXXX] Unable to resolve target 'android-18' targ ...

  4. user-modify属性,让html标签可以编辑

    其实这只是一个很小的需求,但是写着写着发现干货越来越多,所以特意给大家分享一下. 项目需要做一个类似QQ聊天输入的效果 有的同学说,这不是很简单吗?一开始我也这么感觉 :) 观察需求 1.整体固定在底 ...

  5. 什么是javascript的回调函数?

    回调函数(callback) 基本上每本书里都会提一提实际上我们几乎每天都在用回调函数,那么如果问你到底什么是回调函数呢? 1. 回调函数是作为参数传递给另一个函数 2. 函数运行到某种程度时,执行回 ...

  6. 使用Dockerfile制作自己的Docker镜像

    一.背景 一直以来的开发流程都是先从Docker Hub中获取到基础镜像,之后在这个镜像的基础上做开发,以满足一定的需求或者提供某种服务,并由此产生新的镜像,然后就可以push到Docker Hub中 ...

  7. 卷积神经网络CNN与深度学习常用框架的介绍与使用

    一.神经网络为什么比传统的分类器好 1.传统的分类器有 LR(逻辑斯特回归) 或者 linear SVM ,多用来做线性分割,假如所有的样本可以看做一个个点,如下图,有蓝色的点和绿色的点,传统的分类器 ...

  8. TCP/IP笔记(七)TCP详解

    TCP的特点及其目的 为了通过数据包实现可靠性传输,需要考虑很多事情,例如数据的破坏.丢包.重复记忆分片顺序混乱等问题.如不能解决这些问题,也就无从谈起可靠传输. TCP通过检验和.序列号.确认应答. ...

  9. Spring + Mybatis 项目实现动态切换数据源

    项目背景:项目开发中数据库使用了读写分离,所有查询语句走从库,除此之外走主库. 最简单的办法其实就是建两个包,把之前数据源那一套配置copy一份,指向另外的包,但是这样扩展很有限,所有采用下面的办法. ...

  10. 【转载】stm32中断学习

    中断对于开发嵌入式系统来讲的地位绝对是毋庸置疑的,在C51单片机时代,一共只有5个中断,其中2个外部中断,2个定时/计数器中断和一个串口中断,但是在STM32中,中断数量大大增加,而且中断的设置也更加 ...