㈠ shiro前端多角色的权限怎么写
一两句话说不清楚,我推荐一套完整已经实现了你说的功能的项目给你。
Shiro介绍文档:http://www.sojson.com/shiro
Demo已经部署到线上,地址是http://shiro.itboy.net,
管理员帐号:admin,密码:sojson.com 如果密码错误,请用sojson。
PS:你可以注册自己的帐号,然后用管理员赋权限给你自己的帐号,但是,每20分钟会把数据初始化一次。建议自己下载源码,让Demo跑起来,然后跑的更快。
㈡ 前段如何在项目里重新加载权限列表
login(登录,所有人均可见)→登录成功,获取权限→权限不同,侧边栏的数据展示不同
先定义一份公共的路由表,里面仅有一些公共的路由,如login,404
获取到权限后,我们根据权限,得到需要动态添加的路由表,把这份路由表动态添加到router中即可。
前端权限架构的设计一直都是备受关注的技术点.通过给项目引入了权限控制方案,可以满足我们灵活的调整用户访问相关页面的许可.
比如哪些页面向游客开放,哪些页面必须要登录后才能访问,哪些页面只能被某些角色访问(比如超级管理员).有些页面即使用户登录了但受到角色的限制,他也只被允许看到页面的部分内容.
出于实际工作的需要,很多项目(尤其类后台管理系统)需要引入权限控制.倘若权限整体的架构设计的不好或者没有设计,会导致项目中各种权限代码混入业务代码造成结构混乱,其次想给新模块引入权限控制或者功能扩展都十分棘手.
虽然前端在权限层面能做一些事情,但很遗憾真正对权限进行把关的是后端.例如一个软件系统,前端在不写一行权限代码的情况下,当用户进入某个他无权访问的页面时,后端是可以判断他越权访问并拒绝返回数据的.由此可见前端即使不做什么整个系统也是可以正常运行的,但这样应用的体验很不好.另外一个很重要的原因就是前端做的权限校验都是可以被本地数据造假越权通过.
前端如果能判断某用户越权访问页面时,就不要让他进入那张页面后再弹出无权访问的信息提示,因为这样体验很差.最优方案是直接关闭那些页面的入口,只让他看到他能访问的页面.即使他通过输入路径恶意访问,导航最后只会将它带到默认页面或404页面.
前端做的权限控制大抵是先接受后台发送的权限数据,然后将数据注入到应用中.整个应用于是开始对页面的展现内容以及导航逻辑进行控制,从而达到权限控制的目的.前端做的权限控制虽然能提供一层防护,但根本目的还是为了优化体验.
㈢ 前端如何控制用户权限
1. UI处理(根据用户拥有的权限,判断页面上的一些内容是否显示)
2. 路由处理(当用户访问一个它没有权限访问的url时,跳转到一个错误提示的页面)
3. HTTP请求处理(当我们发送一个数据请求,如果返回的status是401或者401,则通常重定向到一个错误提示的页面)
如何实现?
首先需要在Angular启动之前就获取到当前用户的所有的permissions,然后比较优雅的方式是通过一个service存放这个映射关系.对于UI处理一个页面上的内容是否根据权限进行显示,我们应该通过一个directive来实现.当处理完这些,我们还需要在添加一个路由时额外为其添加一个"permission"属性,并为其赋值表明拥有哪些权限的角色可以跳转这个URL,然后通过Angular监听routeChangeStart事件来进行当前用户是否拥有此URL访问权限的校验.最后还需要一个HTTP拦截器监控当一个请求返回的status是401或者403时,跳转页面到一个错误提示页面.
大致上的工作就是这些,看起来有些多,其实一个个来还是挺好处理的.
在Angular运行之前获取到permission的映射关系
Angular项目通过ng-app启动,但是一些情况下我们是希望Angular项目的启动在我们的控制之中.比如现在这种情况下,我就希望能获取到当前登录用户的所有permission映射关系后,再启动Angular的App.幸运的是Angular本身提供了这种方式,也就是angular.bootstrap().看的仔细的人可能会注意到,这里使用的是$.get(),没有错用的是jQuery而不是Angular的$resource或者$http,因为在这个时候Angular还没有启动,它的function我们还无法使用.
进一步使用上面的代码可以将获取到的映射关系放入一个service作为全局变量来使用.
在取得当前用户的权限集合后,我们将这个集合存档到对应的一个service中,然后又做了2件事:
(1) 将permissions存放到factory变量中,使之一直处于内存中,实现全局变量的作用,但却没有污染命名空间.
(2) 通过$broadcast广播事件,当权限发生变更的时候.
如何确定UI组件的依据权限进行显隐
这里我们需要自己编写一个directive,它会依据权限关系来进行显示或者隐藏元素.
这里看到了比较理想的情况是通关一个has-permission属性校验permission的name,如果当前用户有则显示,没有则隐藏.
扩展一下之前的factory:
路由上的依权限访问
这一部分的实现的思路是这样: 当我们定义一个路由的时候增加一个permission的属性,属性的值就是有哪些权限才能访问当前url.然后通过routeChangeStart事件一直监听url变化.每次变化url的时候,去校验当前要跳转的url是否符合条件,然后决定是跳转成功还是跳转到错误的提示页面.
router.js:
mainController.js 或者 indexController.js (总之是父层Controller)
这里依然用到了之前写的hasPermission,这些东西都是高度可复用的.这样就搞定了,在每次view的route跳转前,在父容器的Controller中判断一些它到底有没有跳转的权限即可.
HTTP请求处理
这个应该相对来说好处理一点,思想的思路也很简单.因为Angular应用推荐的是RESTful风格的接口,所以对于HTTP协议的使用很清晰.对于请求返回的status code如果是401或者403则表示没有权限,就跳转到对应的错误提示页面即可.
当然我们不可能每个请求都去手动校验转发一次,所以肯定需要一个总的filter.代码如下:
写到这里我们就基本实现了在这种前后端分离模式下,前端部分的权限管理和控制。
㈣ 请教XX管理系统的前端页面展示和后端权限控制的一般解决方案
前端面向的是用户编程,就是用户可以看得到摸得到的。UI就是其中的一部分。后端是面向服务(服务器)编程,用户是无须知道里面的操作的。举个例子。比如简单的登陆功能。前端的只要做好两个文本控件与一个按钮控件,并且监听按钮的点击事件,将两个文本的参数按照协议发送到服务器端上。这就是前端要做的。而后端,服务器就要接收发送过来的消息并且调用数据库验证用户名与密码。成功后返回结果。
㈤ html 怎么在前端实现角色权限控制
html在前端实现角色权限控制操作:
1、框架提供了按钮权限的扩展服务,我们可以通过简单的扩展来注册我们自己的权限项,我们通过继承AbstractMenuPriv来实现我们的按钮权限类;
㈥ java如何做权限管理
首先介绍下思路:
1、用户表 user;
2、角色表 role;
3、菜单 menu;
4、角色菜单权限表 role_menu;
5、用户菜单权限表 user_menu;
如图:
如果角色没有修改,是不用重新分配权限的,所有userRole 重置为 null,如果角色修改则删除原权限,重新进行分配;
3、最后要优化的就是根据用户查询权限的时候啦,我最开始是这样做的,查询角色权限,用户权限,返回到前端,前端进行处理;结果就是很卡 基本上要三到四秒,
解决方案,一步到位;一个查询返回全部数据。
如下SQL:
SELECT menu.MenuId id, ParentId pid, MenuName text,
(SELECT COUNT(1) FROM sys_user_menu WHERE UserId = #{userId} AND MenuId = sm.MenuId) isShow,
(SELECT CONCAT(
(CASE WHEN smenu.InsPower = 1 THEN 1 ELSE 0 END), ',',
(CASE WHEN smenu.DelPower = 1 THEN 1 ELSE 0 END), ',',
(CASE WHEN smenu.UpdPower = 1 THEN 1 ELSE 0 END), ',',
(CASE WHEN smenu.ViewPower = 1 THEN 1 ELSE 0 END))
FROM sys_user_menu smenu WHERE smenu.UserId = #{userId}
AND smenu.MenuId = sm.MenuId) MenuInfo
FROM sys_role_menu sm INNER JOIN sys_menu menu on sm.MenuId = menu.MenuId
WHERE RoelId = #{roleId}
首先根据 角色ID查询出权限,然后子查询用户是否有该权限,有返回1 木用返回 0;
最后按钮权限 我是直接拼接成字符串,分别对应 添加、删除、修改、查看 1 有该按钮 0 没有该按钮;
优化后 不管是添加、修改用户,加载用户权限都能控制在 1~2 秒;
㈦ javaweb 项目的系统权限管理,怎么设计
按你说的设计可以啊,设置角色,给用户分配角色,角色控制菜单显示,最好做一个后台可以编辑角色,那样方便很多
㈧ 如何给项目里面每个功能点设权限
导读: 一个用户登录系统之后,可以访问哪些站点,那些菜单,那些模块,那些页面,那些按钮,都是可以通过权限进行控制的。 一个权限做的比较完整的项目,一般人员管理,消息管理,菜单管理,站点管理,日志管理,部件管理,权限管理等等都是受权限控制的,这么多模块每个功能点是如何在权限管理下跑的井井有条呢?最近老是看到很多人在发愁权限,所以把自己的一些见解写出来,供大家参考,也只是自己的一点点思路,不足的地方,谢谢指出。 问题:刚开始做模块的时候,模块写好了,被测试提过来“你的日志模块功能点不受权限控制”,当时就很模糊,什么是权限呀,去问测试人员,她打开一个页面,上面有棵功能树(很大,显示各个模块,以及模块下面的操作),你的所有的功能点都没在功能点树上显示,只有显示在树上的才可以把功能点分配给人,自己查去吧。回来看了下别人的代码,呵呵原来一个模块开发完之后需要给当前模块所有功能点注册权限。带着测试出的这个BUG,跟大家一起分享下一些知识点,以及权限的核心思想吧。1.什么是权限?“权限就是有票你就进” 去游乐园,去乘大巴,去坐地铁,必须的买票吧?权限就像你手里的那张票。 “权限就是认证不认人” 权是"权力,制度",限是“限制,管理”,连起来就是:XXXX通过权力,制度去管理XXX,在现在中国有1N多个人口,政府也给每个人发了证“身份证”,抗日时期小日本通过“良民证”去管理“中国人民”,看来受管理的都有一个特点就是“他有证”。 2.你要给谁设权限----谁就是我们所说的功能点 我们要清楚的明白,我们要给系统里的用户角色站点日志等等模块设权限,让有权限的人去管理自己权限下面的操作。 “你要用谁要去控制谁,你的功能点的粒度有多大” 第一个谁一般是用户;第二个谁很可能是一个模块(日志模块),一个表对象,一个表里面的一条记录,甚至是一个页面的一个方法,甚至是一个安牛,你所谓的 功能点可以是上面的所有东西,但是你一定要明白谁要控制是谁?一般可以细化到一个模块,一个页面,页面的一个“删除”,“添加”按钮。 3.怎样去控制?怎样去唯一标识这个“控件”,“方法”,“类”(也就是我说的功能点)"给每个'按钮'一个身份证" 既然权限是“权限就是认证不认人”,那么当然的给没个功能点加一个唯一标识了。 唯一标识一般的方法是“模块名称+控件的ID”。 天呀,这不是要杀了我吗?这么多,没办法,嘻嘻,你必须这么干 4.权限管理模块一直在干什么样的工作【核心】1.)当一个用户进系统之后,可以拿到这个用户所有有可以控制功能点的信息 比如可以拿到有权限的站点,有权限的菜单,有权限的模块,有权限的页面等等。2.)拿到系统里面所有的功能点,然后把它分配给希望分配的角色或者用户 权限管理模块必须可以拿到系统里面你配置的所有的功能点(最好以一棵功能树的形式展现出来),并且可以把权限分配给一些人员,角色,有权限的用户可以把自己的权限分配给别人,权限大的用户可以控制所有信息3.)当开发人员开发一个新的模块的时候,只要做简单的操作就可以把新的功能点注册到权限里面 权限模块必须提供一个可扩展的功能,当系统里面多一个模块的时候,可以让开发人员迅速的注册功能点(一般是XML格式)。
㈨ 后台管理系统 权限分配前端怎么分配
1、最简单的就是登陆控制了。
2、然后是简单的权限控制到功能(页面),这时候你需要知道数据表怎么设计,
SQL怎么查询,代码如何判断。
3、再往上就开始考虑角色的设计。
4、考虑功能细节的控制(新增、更新、删除、...)
5、考虑Scalability、Performance、User-Friendly....
㈩ 权限管理如何实现
点击设置,打开更多,然后点击权限管理