如果没有权限控制,系统的功能完全不设防,全部暴露在所有用户面前。用户登录以后可以使用系统中的所有功能。这是实际运行中不能接受的。
所以权限控制系统的目标就是管理用户行为,保护系统功能。
“权限”=“权力”+“限制”
资源就是系统中需要保护起来的功能。具体形式很多:URL地址、handler方法、service方法、页面元素等等都可以定义为资源使用权限控制系统保护起来。
一个功能复杂的项目会包含很多具体资源,成千上万都有可能。这么多资源逐个进行操作太麻烦了。为了简化操作,可以将相关的几个资源封装到起,打包成“权限”同时分配给有需要的人。
对于一个庞大系统来说,一方面需要保护的资源非常多,另一方面操作系统的人也非常多。把资源打包为权限是对操作的简化,同样把用户划分为不同角色也是对操作的简化。否则直接针对一个个用户进行管理就会很繁琐。
所以角色就是用户的分组、分类。先给角色分配权限,然后再把角色分配给用户,用户以这个角色的身份操作系统就享有角色对应的权限了。
系统中的用户其实是人操作系统时用来登录系统的账号、密码。
如果只能在一个外键列上存储关联关系数据,那么现在这个情况无法使用 SQL 语句进行关联查询
select t_student.id, t_student.name
from t_student
left join t_inner on t_student.id = t_inner.student_id
left join t_subject on t_inner.subject_id = t_subject.id
where t_subject.id = 1;
组合起来 不能重复即可!
鉴于权限控制的核心是用户通过角色与权限进行关联,所以前面描述的权限控制系统可以提炼为一个模型:RBAC(Role-BasedAccessControl,基于角色的访问控制)。
在 RBAC 模型中,一个用户可以对应多个角色,一个角色拥有多个权限,权限具体定义用户可以做哪些事情。
最基本的 RBAC 模型,RBAC 模型的核心部分,后面三种升级版 RBAC 模型也都是建立在 RBACO 的基础上。
在 RBACO 的基础上增加了角色之间的继承关系。角色A继承角色B之后将具备B的权限再增加自己独有的其他权限。比如:付费会员角色继承普通会员角色,那么付费会员除了普通会员的权限外还具备浏览付费内容的权限。
在 RBACO 的基础上进一步增加了角色责任分离关系。责任分离关系包含静态责任分离和动态责任分离两部分。
RBAC3 是在 RBAC0 的基础上同时添加 RBAC2 和 RBAC3 的约束,最全面、最复杂。
$(function () {
$('#asyncBtn').click(function () {
console.log('ajax 函数之前');
$.ajax({
'url': 'test/ajax/async.html',
'type': 'post',
'dataType': 'text',
'success': function (responseText) {
// success 是接收到服务器端响应后执行
console.log('ajax 函数内部的 success 函数' + responseText);
}
});
// 在 $.ajax() 执行完成后执行,不等待 success 函数
console.log('ajax 函数之后');
});
});
$(function () {
$('#asyncBtn').click(function () {
console.log('ajax 函数之前');
$.ajax({
'url': 'test/ajax/async.html',
'type': 'post',
'dataType': 'text',
// 关闭异步工作模式,使用同步方式工作,此时:所有操作在同一个线程内按顺序执行
'async': false,
'success': function (responseText) {
// success 是接收到服务器端响应后执行
console.log('ajax 函数内部的 success 函数' + responseText);
}
});
// 在 $.ajax() 执行完成后执行,不等待 success 函数
console.log('ajax 函数之后');
});
});