问题描述
大家好,问下现在在web项目中比较好的权限控制的方式是什么?我现在的实现方式是从登陆的地方获取用户id,然后传到后面的业务操作中,在sql中用where控制的,这样在每次的业务中都需要加这个权限控制,有没有更好的方法啊?
解决方案
解决方案二:
关注一下最近在看springsecurity,权限这个东西,很迷茫。
解决方案三:
继承,在父类判断或监听器
解决方案四:
说的太概念了额,偶做过功能权限跟数据权限的。功能权限将操作action做成功能点,用户的权限从功能点权限映射表加载,控制操作权限;你说的貌似想数据权限,就是部分没有权限的数据排除掉,这种需要将数据某一属性作为依据,根据它在业务处理时动态对sql控制条件。跟你说的挺雷同--
解决方案五:
#我目前的做法是写一个BaseAction类继承action类,里面写一个判断权限是否拥有的方法,返回类型是boolean,每个action都继承这个基类。做一个xml文件,里面放入每个action与数据表里权限id的映射。用户登陆时得到该用户所有的权限id组,通过那个xml得到用户可以操作的action组,在每个具体action中通过调用哪个判断权限的方法,来确定该action转向的页面。
解决方案六:
引用3楼hyf002的回复:
说的太概念了额,偶做过功能权限跟数据权限的。功能权限将操作action做成功能点,用户的权限从功能点权限映射表加载,控制操作权限;你说的貌似想数据权限,就是部分没有权限的数据排除掉,这种需要将数据某一属性作为依据,根据它在业务处理时动态对sql控制条件。跟你说的挺雷同--#
支持上面的说法。功能权限较好做,登陆时做下权限给判断就可,数据权限(状态权限)可根据具体业务画面来处理,那就是参数传值的问题了,也不会太难。
解决方案七:
问一下,如果我直接知道你的ACTION请求地址,直接请求你的对应ACTION怎么办?假设我也知道你的BEAN或者VO,DTO,我直接请求怎么拦截下来?
解决方案八:
引用4楼zs86374877的回复:
我目前的做法是写一个BaseAction类继承action类,里面写一个判断权限是否拥有的方法,返回类型是boolean,每个action都继承这个基类。做一个xml文件,里面放入每个action与数据表里权限id的映射。用户登陆时得到该用户所有的权限id组,通过那个xml得到用户可以操作的action组,在每个具体action中通过调用哪个判断权限的方……
这方法可以
解决方案九:
引用4楼zs86374877的回复:
我目前的做法是写一个BaseAction类继承action类,里面写一个判断权限是否拥有的方法,返回类型是boolean,每个action都继承这个基类。做一个xml文件,里面放入每个action与数据表里权限id的映射。用户登陆时得到该用户所有的权限id组,通过那个xml得到用户可以操作的action组,在每个具体action中通过调用哪个判断权限的方……
建议这位把代码共享下!!!
解决方案十:
引用4楼zs86374877的回复:
我目前的做法是写一个BaseAction类继承action类,里面写一个判断权限是否拥有的方法,返回类型是boolean,每个action都继承这个基类。做一个xml文件,里面放入每个action与数据表里权限id的映射。用户登陆时得到该用户所有的权限id组,通过那个xml得到用户可以操作的action组,在每个具体action中通过调用哪个判断权限的方……
这个方法果然不一样!那我想问你!<permissions><unit><permissionId>010101</permissionId><actionUrl>userAction.action</actionUrl></unit>.....................</permissions>提出几个疑问!1:你这样的设计自然是没有问题!权限编号login后加载到session当中当每次请求时去//判断权限他的BaseAction里面的方法我猜是这个样子booleanhaveRightToRequestURl(Stringurl){booleanb=false;Integer[]permitArray=加载用户权限;String[]actionUrlArray=读取action列表if(url....判断请求URl是否在ActionUrlArray中){returnb;}}
以上代码估计你是这么写的疑问1:action路径保存在*.XML中.为什么不保存在db中呢!难道xml比数据库更安全。更好操作![操作xml的Api也不是那么好用]疑问2:你在BaseAction中写判断权限的方法为什么不写过拦截器呢!方便,好配置,而轻松耦合!你如果写在BaseAction里面那么你在每个action中同样要去调用super.haveRightToRequestURl();这样只要是有权限控制的地方你都得写.个人观点,如有异议请提出!.虚心接受!
解决方案十一:
xml文件是我猜想的!当然如果你能贴出来更好。只要不涉及到公司保密什么的就行!
解决方案十二:
application.setAttribute("adminType","admin");这是一个键——值形式保存参数的东西adminType是保存数据的参数相当于一个变量admin是用户的权限可以把用户权限放到第二个参数上application是全局变量在别的网页上用application.getAttribute("adminType")就可以获取保存在adminType中的数据这样就可以进行判断但是application是全局变量不要这么用因为别人访问网页的时候也是用同一个application那样就乱套了推荐使用sesstion他的用法和application一样他的意思是用户与服务器的一次会话只能你用别人用不了sesstion.setAttribute("adminType","admin");和上面一样--END
解决方案十三:
引用1楼osomc的回复:
关注一下最近在看springsecurity,权限这个东西,很迷茫。
去SpringSide吧,里面有集成的Springsecurity,还有实例.
解决方案十四:
比较简单的是自己写的Filter在这里控制权限成熟的框架SpringSecurity
解决方案十五:
我实现的方法是把用户的权限分组,该权限可以操作的action的映射存在数据库中,再把权限分给用户。写一个BaseAction类继承action类,里面写一个判断权限是否拥有的方法,返回类型是boolean,每个action都继承这个基类。publicabstractclassBaseAction{publicbooleanhasRight(){//根据登录信息判断是否有权限}}
其他有权限设置的action继承BaseActionpublicclassOtherActionextendsBaseAction{}
四楼的详细做法,可能就是上面的
解决方案:数据库要有用户表、角色表、用户角色关联表、权限表、角色权限关联表,再用springsecurity去控制。
解决方案:我已经被弄得有点头大了。。。