- 浏览: 47483 次
- 性别:
- 来自: 无锡
最新评论
-
RainWu:
...
chx 学习jForum笔记十四 数据表四 jforum_groups及jforum_user_groups -
c_huabo:
这都被你发现了!!!
chx 学习jForum笔记十七 实现中文搜索 -
beermonkey:
感谢啊。。。。
chx 学习jForum笔记十七 实现中文搜索
2010.12.6 接上周日,继续。
PermissionControl pc = SecurityRepository.get
(userId); //权限控制
if (pc.canAccess
(SecurityConstants.PERM_FORUM, Integer.toString(forum.getId()))) {
forums.add(forum); //如果有权控制板块,则添加到返回列表
}
正如字面意思pc是权限控制,先看net.jforum.security/PermissionControl.java
private RoleCollection roles;//权限集合
private transient GroupSecurityDAO smodel;//组权限数据表
这里有两个属性,一个是权力集合,一个是组权限数据表,暂时没看懂有什么用。
public boolean canAccess(String roleName, String roleValue)
{
Role role = this.roles.get(roleName);
if (role == null) {
return false;
}
return role.getValues
().contains(new RoleValue(roleValue));
}
根据Category.java中的调用语句看,canAccess()的两个参数,一个是'perm_fourm',另一个是板块的ID。而在canAccess()这里,先根据perm_fourm获取一个Role,rol.getValues()是什么?
根据net.jforum.security/role.java
public RoleValueCollection getValues()
{
return this.
roleValues
;
}
private final RoleValueCollection roleValues = new RoleValueCollection();
就是说,一个role 对应多个RoleValue ,而fourm_id也可能是一个RoleValue
pc.canAccess()就是判断role中是否包含指定的RoleValue。
再根据本页第一句,看net.jforum.security/SecurityRepository.java
public static PermissionControl get(int userId)
{ //从缓存中读权限控制
PermissionControl pc = (PermissionControl)cache.get(FQN, Integer.toString(userId));
if (pc == null) { //缓存中没有
try {
pc = load
(userId); //取用户权限
}
catch (Exception e) {
throw new SecurityLoadException(e);
}
}
public static PermissionControl load(int userId)
{
return SecurityRepository.
load
(userId, false);
}
好绕啊。
public static PermissionControl load(int userId, boolean force)
{
if (force || cache.get(FQN, Integer.toString(userId)) == null) { //强制重取或缓存中没有
UserDAO um = DataAccessDriver.getInstance().newUserDAO();
return SecurityRepository.
load
(um.selectById(userId), force);
}
return SecurityRepository.get(userId);
}
再看
public static PermissionControl load(User user, boolean force)
{
String userId = Integer.toString(user.getId());
if (force || cache.get(FQN, userId) == null) { //强制重取或缓存中没有
PermissionControl pc = new PermissionControl();
// load roles
GroupSecurityDAO dao = DataAccessDriver.getInstance().newGroupSecurityDAO();
pc.setRoles(dao.
loadRolesByUserGroups
(user)); //从用户所在的组中取权限
cache.add(FQN, userId, pc);
return pc;
}
return SecurityRepository.get(user.getId());
}
再找doa.loadRolesByUserGroups(),在net.jforum.dao.generic.security\GenericGroupSecurityDAO.java中
public RoleCollection loadRolesByUserGroups(User user)
{
List groups = user.getGroupsList(); //取用户的所有组
// When the user is associated to more than one group, we
// should check the merged roles
int[] groupIds = this.getSortedGroupIds(groups); //对组排序
RoleCollection groupRoles = RolesRepository.getGroupRoles(groupIds); //从缓存中根据组取权限
// Not cached yet? then do it now
if (groupRoles == null) { //缓存中没有
groupRoles = this.
loadRoles
(groupIds); //从数据表中取所有组的权限
RolesRepository.addGroupRoles(groupIds, groupRoles); //将所有组ID及组权限写入缓存中
}
return groupRoles;
}
再看从数据表中取组权限的过程:
protected RoleCollection loadRoles(int[] groupIds) //从数据表中取所有组的权限
{
String sql = SystemGlobals.getSql("PermissionControl.loadGroupRoles"); //取sql语句
String groupIdAsString = SecurityCommon.groupIdAsString(groupIds); //将组ID转成适合SQL语句的字符型
if ("".equals(groupIdAsString)) {
// We suppose there is no "negative" group ids
sql = sql.replaceAll("#IN#","-1");
}
else { //将组ID加入SQL语句。
sql = sql.replaceAll("#IN#", groupIdAsString);
}
RoleCollection roles = null;
PreparedStatement p = null;
ResultSet rs = null;
try {
p = JForumExecutionContext.getConnection().prepareStatement(sql);
rs = p.executeQuery();
roles = SecurityCommon.
loadRoles
(rs); //将SQL执行结果转为roles
}
catch (SQLException e) {
throw new DatabaseException(e);
}
finally {
DbUtils.close(rs, p);
}
return roles;
}
查看net.jforum.dao.generic.security/SecurityCommon.java
public static RoleCollection loadRoles(ResultSet rs)
{
RoleCollection rc = new RoleCollection();
try {
Role r = null;
String lastName = null;
while (rs.next()) {
String currentName = rs.getString("name'); //当前规则名称
if (!currentName.equals(lastName)) { //当前规则名称与最后规则名称不同
if (r != null) {
rc.add(r); //将规则加入返回集,首次不同由于r的初始值为null,因此不会加入
}
r = new Role();
r.setName(rs.getString("name")); //设置规则名称,那么ID呢?没看到设置role的ID啊。
lastName = currentName; //最后规则名称刷新为当前规则名称
}
String roleValue = rs.getString("role_value");
if (!rs.wasNull() && StringUtils.isNotBlank(roleValue)) {
r.getValues().add(new RoleValue(roleValue)); //设置role的rolevalue
}
}
if (r != null) {
rc.add(r);//将循环后最后一个role放入结果集
}
return rc;
}
catch (SQLException e) {
throw new DatabaseException(e);
}
}
总结一下,role中有多个rolevalue.取权限的语句在"PermissionControl.loadGroupRoles" 中。
发表评论
-
chx 学习jForum笔记十九 jForum定时作业
2011-02-25 15:43 1014参照jforum原有的两个定时作业SummarySchedul ... -
chx 学习jForum笔记十八 jForum与ms sqlserver
2011-02-23 16:39 7844jForum的原生数据库是mysql,但对sqlserver也 ... -
chx 学习jForum笔记十七 实现中文搜索
2011-02-23 16:04 1924最初测试的时候中文搜索一直都不成功。所以以为要对源程序进行大幅 ... -
chx 学习jForum笔记十六 实现附件移植,添加附件时按钮无效的问题解决
2011-02-23 15:59 3160==背景== 原论坛附件存放于d:\res\cibfo ... -
chx 学习jForum笔记十五 实现用户及用户组同步
2011-02-23 15:25 1745==背景== 原先有一个随时维护的用户表rswk、权限表ci ... -
chx 学习jForum笔记十四 数据表四 jforum_groups及jforum_user_groups
2011-02-14 14:07 1486jforum_groups group_id ... -
chx 学习jForum笔记十三 数据表三 jforum_roles及jforum_role_values
2011-02-12 16:19 1312jforum_roles 权限表。是一张组与基本权限的对应表。 ... -
chx 学习jForum笔记十二 数据表二 jforum_categories及jforum_forums
2011-02-12 15:05 1432jforum_categories是子论坛的分类以下称为栏目。 ... -
chx 学习jForum笔记十一 实现单点登录SSO
2011-02-09 11:55 2006分为三部分: 1.导入原用户数据库. 2.修改SSO模块, ... -
chx 学习jForum笔记十 数据表一 jforum_users
2011-02-09 10:35 1278user_id bigint ... -
chx 学习jForum笔记九-ForumAction四,发现用户注册模块
2010-12-09 14:27 19972010.12.9接上午。继续看net.jforum.view ... -
chx 学习jForum笔记八-ForumAction三,发现用户认证模块。
2010-12-09 11:15 17202010.12.9。接昨天 在net.jforum.view ... -
chx 学习jForum笔记七-ForumAction二
2010-12-08 17:24 11682010.12.8 接昨天。 下面这句是存在于net.jfo ... -
chx 学习jForum笔记六-MostUsersEverOnline的结束及ForumAction-list的开始
2010-12-07 15:54 22952010.12.7 继续查找关键字MostUsersEverO ... -
chx 学习jForum笔记五-参数表的操作
2010-12-07 15:05 9982010.12.7 继续查找关键字MostUsersEverO ... -
chx 学习jForum笔记四
2010-12-06 15:21 10122010.12.6 接上午。在net.jforum.repos ... -
chx 学习jForum笔记二
2010-12-05 10:26 1248我的源程序是安道森练 ... -
chx 学习jForum笔记一
2010-12-05 09:37 1680目标:jForum二次开发,读懂源程序。 修改权限管理模块, ...
相关推荐
《jForum与MS SQLServer整合学习笔记》 jForum是一款基于Java的开源论坛系统,它以其高度可定制性、灵活性和强大的功能深受开发者喜爱。在本文中,我们将深入探讨如何将jForum与Microsoft SQL Server(简称MS SQL...
【标题】"chx99个人主页源码_chx99.zip" ...通过深入学习和分析 chx99 的个人主页源码,不仅可以提升我们的前端开发技能,还可以借鉴其设计思路,为自己的项目提供灵感。同时,这也是一种尊重和学习开源精神的方式。
这一研究聚焦于理解CHX(环己亚胺)、TNFα以及JNK(c-Jun N端激酶)三者之间的复杂关系,以及它们如何共同作用于人类肝癌细胞的凋亡过程。 ### CHX(环己亚胺) 环己亚胺(Cycloheximide,CHX)是一种蛋白质合成...
- 对于特定的输入频率,输出端口会显示不同倍数的输入频率电平,例如1xFin、2xFin、3xFin、4xFin和5xFin。 - 输入端口和输出端口的电压驻波比(VSWR)均为2.5:1,表明电路具有良好的阻抗匹配。 ### 技术细节 - ...
CHX-I防火墙官方教程-附带翻译终稿.pdf
总之,通过对【CMS程序]chx99个人主页源码_chx99(ASP.NET源码)的深入研究,我们可以学习到ASP.NET Web Forms的开发技术,数据绑定,用户认证,配置管理,以及前端交互等多个方面,这将对提升我们的ASP.NET开发技能...
此外,对于初学者来说,阅读和理解CHX的源代码也是一个很好的学习C语言和理解十六进制编辑器工作原理的机会。 总的来说,CHX 是一款实用的终端工具,它的轻量级设计和高度可定制性使其成为开发人员和系统管理员的...
CHX-3大手臂大法兰.SLDDRW
HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网HA-SoftEther-CHX虚拟专网
7. **第三方服务集成**:个人主页可能集成社交媒体API、评论系统、统计分析工具,如Google Analytics,以提升用户体验和跟踪网站表现。 8. **SEO优化**:源码应考虑搜索引擎优化(SEO),包括元标签、友好的URL结构...
这篇文章将详细讲解与"CHX612.zip"压缩包相关的知识点,主要涉及HX612触摸IC、STC15W408AS微控制器以及相关编程与接口技术。 首先,我们关注的是HX612,这是一款触摸传感器集成电路。不同于常见的I2C接口,HX612...
[CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载[CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载[CMS程序]chx99个人主页源码_chx99.zip源码ASP.NET网站源码打包下载[CMS程序]...
在给定的“Chx.rar”压缩包中,包含的主题是“最优化方法”和“梯度优化”,特别是“梯度法”。这表明压缩包里的资源可能涉及如何使用梯度信息来优化复杂问题的解决方案。 首先,我们要理解“最优化”是什么。最...
总的来说,"ASP.NET源码——[CMS程序]chx99个人主页源码.zip"是一个宝贵的学习资源,不仅展示了ASP.NET在实际项目中的应用,也提供了实践和理解Web开发最佳实践的机会。无论是初学者还是经验丰富的开发者,都能从中...
本软件是一个模似网卡和集线器的工具,可以模似集线器功能,实现VPN的功能。使得系统把此软件识别成一块网卡,有了这个东西,只要可以访问外网,都可以连接到虚拟HUB上与其他电脑组成局域网,在此虚拟的局域...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
在本课件中,主要讨论了三种数据相关类型:真数据相关(Data dependences)、名字相关(Name dependences)以及控制相关(Control dependences)。 1. **真数据相关(Data Dependences)**:这种相关指的是指令i的...
CHX-I防火墙官方教程-附带翻译借鉴.pdf
通过研究这个源码,学习者不仅可以了解ASP.NET的基本概念和编程技巧,还可以深入理解CMS系统的架构和工作原理,对提升Web开发技能大有裨益。同时,如果你是个人站长,这个源码可以作为搭建自己个性化主页的起点,...