阅读 72

程序设计中的数据库的权限表设计

权限管理RBAC基于角色的访问控制

1.实体对应关系

用户>>>>>>用户-角色>>>>>>角色

角色>>>>>>角色-权限>>>>>>资源

2.权限表设计

多对多关系时为五个表

用户>>>>>>用户-角色关系表>>>>>>角色表>>>>>>角色-资源关系表>>>>>>资源表

3.根据请求的url判断角色(以java为例)

a.实体类中添加角色列表(角色是确定的,用户是变化的)

@ApiModelProperty(value = "角色列表")
    @TableField(exist = false)
    private List roles;

b.在接口和实现类中编写根绝角色获取菜单列表和接口和实现过程方法

//根据角色获取菜单列表
    List getMenusWithRole();

c.mapper中添加方法,代码与上相同

d.在xml中编写sql语句 


    

配置xml的resultMap

extends="BaseResultMap">
        
            
            
            
        
    

e.在config中配置过滤器,根据请求url请求所需要的角色

@Component
public class CustomeFilter implements FilterInvocationSecurityMetadataSource {
    @Autowired
    private IMenuService menuService;
    AntPathMatcher antPathMatcher = new AntPathMatcher();



    @Override
    public Collection getAttributes(Object object) throws IllegalArgumentException {
        //获取请求的url
        String requestUrl = ((FilterInvocation) object).getRequestUrl();
        List menus = menuService.getMenusWithRole();
        for (Menu menu : menus) {
            //判断请求url和惨淡角色是否匹配
            if(antPathMatcher.match(menu.getUrl(), requestUrl)){
                String[] str = menu.getRoles().stream().
                        map(Role::getName).toArray(String[]::new);
                return SecurityConfig.createList(str);


            }
        }
        //未匹配的url默认登录即可访问
        return SecurityConfig.createList("ROLE_LOGIN");
    }

 

原文:https://www.cnblogs.com/timewarlock/p/15223558.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐