角色的新增

1,打开新增页面时,需要使用xml文件中的内容来初始化复选框

2,保存时要将名称存入角色表,将选择的权限存入到角色权限中间表


DAO:

public void insert(Role role) throws DAOException {
	if(role==null){
		return;
	}
	
	String sql = "insert into role_info values(role_seq.nextval, ?)";
	Connection con = DBUtil.getConnection();
	
	try {
		con.setAutoCommit(false);
		
		String[] columnNames = new String[]{"id"};
		//插入角色表,插入时指定要返回的列名,插入后可以得到该列的值
		PreparedStatement ps = con.prepareStatement(sql, columnNames);
		ps.setObject(1, role.getName());
		ps.executeUpdate();
		
		//取到插入的id列
		ResultSet rs = ps.getGeneratedKeys();
		Integer roleId = null;
		if(rs.next()){
			roleId = rs.getInt(1);
		}
		
		//插入中间表
		List<Integer> pids = role.getPrivilegeIds();
		if(pids!=null && pids.size()>0){
			String sql2 = "insert into role_privilege values (?,?)";
			PreparedStatement ps2 = con.prepareStatement(sql2);
			for(Integer pid: pids){
				ps2.setObject(1, roleId);
				ps2.setObject(2, pid);
				ps2.addBatch();
			}
			ps2.executeBatch();
		}
		con.commit();
	} catch (SQLException e) {
		e.printStackTrace();
		try {
			con.rollback();
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		throw new DAOException("新增角色失败!", e);
	} finally{
		DBUtil.close();
	}
}

Action:

public class ToAddRoleAction {
	
	public String execute(){
		
		privileges = PrivilegeReader.getPrivileges();
		return "success";
	}
	
	//output,权限集合用于初始化复选框
	private List<Privilege> privileges;

	public List<Privilege> getPrivileges() {
		return privileges;
	}

	public void setPrivileges(List<Privilege> privileges) {
		this.privileges = privileges;
	}
	
}

public class AddRoleAction {
	
	public String execute(){
		IRoleDAO dao = DAOFactory.getRoleDAO();
		try {
			dao.insert(role);
		} catch (DAOException e) {
			e.printStackTrace();
			return "error";
		}
		
		return "success";
	}
	//input
	private Role role;

	public Role getRole() {
		return role;
	}

	public void setRole(Role role) {
		this.role = role;
	}
	
}

struts.xml

<!-- 转到新增角色页面Action -->
<action name="toAddRole" class="netctoss.action.role.ToAddRoleAction">
	<result name="success">
		/WEB-INF/role/addRole.jsp
	</result>
</action>
<!-- 新增角色Action -->
<action name="addRole" class="netctoss.action.role.AddRoleAction">
	<result name="success" type="redirectAction">
		findRole
	</result>
</action>

Jsp:

<form action="addRole" method="post" class="main_form">
	<div class="text_info clearfix"><span>角色名称:</span></div>
	<div class="input_info">
	    <s:textfield name="role.name" cssClass="width200" />
	    <span class="required">*</span>
	    <div class="validate_msg_medium">不能为空,且为20长度的字母、数字和汉字的组合</div>
	</div>                    
	<div class="text_info clearfix"><span>设置权限:</span></div>
	<div class="input_info_high">
	    <div class="input_info_scroll">
		<s:checkboxlist name="role.privilegeIds" list="privileges" listKey="id" listValue="name"/>
	    </div>
	    <span class="required">*</span>
	    <div class="validate_msg_tiny" id="privilegeMsg">至少选择一个权限</div>
	</div>
	<div class="button_info clearfix">
	    <input type="button" value="保存" class="btn_save" οnclick="save();" />
	    <input type="button" value="取消" class="btn_save" />
	</div>
    </form>


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 新增用户 ``` public class User { private String username; private String password; // ...其他属性 public User(String username, String password) { this.username = username; this.password = password; } // ...getter和setter方法 } ``` 2. 赋予角色 ``` public class Role { private String name; private List<Permission> permissions; // ...其他属性 public Role(String name, List<Permission> permissions) { this.name = name; this.permissions = permissions; } // ...getter和setter方法 } ``` 3. 角色授权 ``` public class Permission { private String name; // ...其他属性 public Permission(String name) { this.name = name; } // ...getter和setter方法 } public class Authorization { private Map<Role, List<Permission>> permissions; public Authorization() { permissions = new HashMap<>(); } public void grantPermission(Role role, Permission permission) { List<Permission> rolePermissions = permissions.get(role); if (rolePermissions == null) { rolePermissions = new ArrayList<>(); permissions.put(role, rolePermissions); } rolePermissions.add(permission); } public boolean hasPermission(Role role, Permission permission) { List<Permission> rolePermissions = permissions.get(role); return rolePermissions != null && rolePermissions.contains(permission); } } ``` 4. 新增接口权限 ``` public class ApiPermission extends Permission { public ApiPermission(String name) { super(name); } } ``` 5. 受保护接口 ``` public class ProtectedApi { private Authorization authorization; public ProtectedApi(Authorization authorization) { this.authorization = authorization; } public void doSomething(User user) { Role userRole = getUserRole(user); if (authorization.hasPermission(userRole, new ApiPermission("doSomething"))) { // 执行受保护操作 } else { throw new SecurityException("User is not authorized to perform this action"); } } private Role getUserRole(User user) { // 获取用户角色 return new Role("user", Collections.singletonList(new ApiPermission("doSomething"))); } } ``` 6. 使用新增用户正常登录访问受保护接口 ``` public class Main { public static void main(String[] args) { User user = new User("username", "password"); Role userRole = new Role("user", Collections.singletonList(new ApiPermission("doSomething"))); Authorization authorization = new Authorization(); authorization.grantPermission(userRole, new ApiPermission("doSomething")); ProtectedApi protectedApi = new ProtectedApi(authorization); // 用户登录并访问受保护接口 protectedApi.doSomething(user); } } ``` 以上是一个简单的用户授权和角色管理的示例,其中使用了 Java 编程语言来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值