解决方案 »
- 一个延迟调用。。。让系统停顿下。。。
- activeMQ取消息的问题
- 关于连接池的问题(高手请进)急!
- 100分求救:使用jbuilder2005->XML->DataBinding->Castor的菜鸟级问题
- J2EE程序开发中的src如何找到啊?(javax.servlet.*)
- 急!怎样实现jsp与php的通信?
- 菜鸟问题:什么是架构,框架??
- windows 2000(persional)怎么装web logic
- 诚邀具有JAVA开发经验且英语水平过硬的开发人员一起来翻译J2SDK标准版V1.4.0 API文档和J2EE1.3 API文档,完成后将放在网上共享下载,详情到网站http://china-programer.myrice.com/
- 疯掉的定时任务
- 做个网络教学平台-怎么设计-需求分析等
- struts 1.x文件上传
每个资源中定义操作...比如, 用户模块中有注册, 登录操作.
class Module {
Permission[] permissions;
}
class Permission {
int location;
String name;
}
每种操作代表一位..比如注册是第一位, 登录是第二位.(从后向前数....这里看不明白可以先记下来..)用户模块这个资源的json表示为:
user : {
permission : [
{1, "注册"},
{2, "登录"}
]
}好了, 讲以下, 每个用户的权限怎么和资源关联起来..中间表咯...
中间表存留一个用户的标识(id)和一个资源的标识(id), 还有一个表示权限的操作符..这里我们用int型的数来表示..这个中间表我们叫做访问控制列表:
class Acl {
User user; //用户关联, 可以建成弱关联.
Module module; //模块关联, 可以建成弱关联.
int authorized; //权限标识符.
}那么我们怎么来操作权限呢?
权限的操作通常有赋予权限和获取权限. 这里讲讲赋予权限吧..
int authorized初始化的时候, 值是0;
假设现在要赋予登录的权限. 注册这个Permission的location对应的是2; 也就是从右往左数的第二位.
定义一个临时的int temp = 1; 我们的登录位是第二位.
temp现在转成二进制是: 00000000 00000000 00000000 0000001(int有32位)
将temp左移1位. 得到temp = 00000000 0000000 0000000 00000010
此时, 可以看到, temp只有表示登录的第二位是1, 其余都是0;
将temp和acl中的authorized进行或操作,
temp | authorized, 得到的是: 00000000 00000000 00000000 00000010
回忆一下或操作, 0会保留原来的操作位不变, 1不论原操作位是什么, 都设置为1.
那么我们已经成功为authorized设置了登录的权限.哎呀, 讲的有点模糊了....将就听听吧...详细可以查查linux的文件权限相关资料和RBAC的授权资料.
role{rid, rname(角色名称) }.
permesion{pid, rid(关联权限表主键)}.3. 一个用户只有一个角色, 一个角色对象多个权限.
/*
MySQL Data Transfer
Source Host: localhost
Source Database: store
Target Host: localhost
Target Database: store
Date: 2009-7-13 22:01:49
*/SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for popedom
-- ----------------------------
DROP TABLE IF EXISTS `popedom`;
CREATE TABLE `popedom` (
`nm` varchar(40) NOT NULL,
`expl` varchar(40) NOT NULL DEFAULT '',
`st` bit(1) NOT NULL DEFAULT '\0',
PRIMARY KEY (`nm`),
KEY `ns` (`nm`,`st`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records
-- ----------------------------
/*
MySQL Data Transfer
Source Host: localhost
Source Database: store
Target Host: localhost
Target Database: store
Date: 2009-7-13 22:02:10
*/SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for role
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role` (
`nm` varchar(40) NOT NULL,
`expl` varchar(40) NOT NULL DEFAULT '',
`st` bit(1) NOT NULL DEFAULT '\0',
PRIMARY KEY (`nm`),
KEY `ns` (`nm`,`st`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records
-- ----------------------------
/*
MySQL Data Transfer
Source Host: localhost
Source Database: store
Target Host: localhost
Target Database: store
Date: 2009-7-13 22:02:14
*/SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for roleinfo
-- ----------------------------
DROP TABLE IF EXISTS `roleinfo`;
CREATE TABLE `roleinfo` (
`nm` varchar(40) NOT NULL,
`pnm` varchar(40) NOT NULL,
`st` bit(1) NOT NULL DEFAULT '\0',
PRIMARY KEY (`nm`,`pnm`),
KEY `pnm` (`pnm`),
CONSTRAINT `roleinfo_ibfk_1` FOREIGN KEY (`nm`) REFERENCES `role` (`nm`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `roleinfo_ibfk_2` FOREIGN KEY (`pnm`) REFERENCES `popedom` (`nm`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;-- ----------------------------
-- Records
-- ----------------------------
/*
MySQL Data Transfer
Source Host: localhost
Source Database: store
Target Host: localhost
Target Database: store
Date: 2009-7-13 22:01:00
*/SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for admin
-- ----------------------------
DROP TABLE IF EXISTS `admin`;
CREATE TABLE `admin` (
`id` char(14) NOT NULL,
`sid` varchar(50) NOT NULL DEFAULT '',
`nm` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`pw` blob,
`lst` bit(1) NOT NULL DEFAULT '\0',
`st` bit(1) NOT NULL DEFAULT '\0',
`rn` varchar(40) NOT NULL DEFAULT '',
`edt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`ldt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`ndt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`lip` varchar(30) NOT NULL DEFAULT '',
`nip` varchar(30) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `nm` (`nm`),
KEY `rn` (`rn`),
KEY `nm_2` (`nm`),
CONSTRAINT `admin_ibfk_1` FOREIGN KEY (`rn`) REFERENCES `role` (`nm`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;