Android 如何通过java代码实现修改指定路径文件的读写权限。

Android 如何通过java代码实现修改指定路径文件的读写权限。,第1张

renameTo(Filedest)方法的作用是,重新命名此抽象路径名表示的文件你用这个只是将该文件换了一个路径,也就是换了一个位置而已,并不是复制。你要复制的话,貌似只能新建一个文件,该文件的路径是将原文件复制到的路径;然后将旧文件的内容读出来,写入到新文件中去,这样就实现了文件的复制

首先介绍下思路:

1、用户表 user

2、角色表 role

3、菜单 menu

4、角色菜单权限表 role_menu

5、用户菜单权限表 user_menu

如图:

根据用户角色取出该角色所有权限,并对用户进行权限分配;注意菜单的按钮(新增、删除、修改)权限是放在中间表(user_menu)中的;

1、新增用户时,是要根据用户角色进行分配权限的 一定记得批量添加;批量、批量、批量,重要的事情说三遍,不要查询角色权限,然后for循环,这样效率太低了;

SQL如下:

INSERT INTO sys_user_menu(UserId, MenuId, DelPower,    UpdPower,    InsPower,    ViewPower)

SELECT #{userId} UserId, MenuId, 1 DelPower, 1 UpdPower, 1 InsPower, 1 ViewPower FROM sys_role_menu WHERE RoelId = #{roleId}

updPower 默认都是有的 所以都是1,这样根据角色查询出权限直接添加,响应时间大大提升;

2、修改用户角色也要记得重新分配用户权限哦!这个不能忘,可以用上面的方法;

业务方法:

如果角色没有修改,是不用重新分配权限的,所有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 秒;

关于JAVA软件的权限(这里用塞班证书来做类比) 有些SIS软件是不需要开机自启、后台自动运行等功能的,这种软件就不需要签名如果你要实现这些功能,就必须签名同理,有些JAVA软件不需要联网、读取存储卡内容、发送短信等功能,这种JAVA软件,直接用JAR安装即可正常使用但是,如果这个JAVA软件需要联网(比如航海家浏览器),需要读取存储卡内容(比如anyview),需要发送短信等等,那么如果你直接用JAR安装,在运行软件时,每当你需要联网、读取、发短时,就会出来提示框,问你是否允许这个 *** 作这种情况下,就需要JAD文件来解决了用JAD安装JAVA软件,就好比用证书给SIS软件签名具体方法:将JAD和JAR文件放在同一个文件夹下,文件名保持相同,点击JAD安装。安装以后,去程序管理,找到这个软件,套件设置,将所有的权限都从每次询问,改成总是允许,这样,你就不会再看到烦人的提示框了,世界清静了JAD也是分种类的有些JAD是无效的:大部分的JAVA软件,都会同时提供JAD和JAR两个文件同时下载,但是,有时候,你用JAD安了以后,发现最高权限还是每次允许,这就说明,这个JAD是低权限的(好比塞班证书的13、17、19、20权限),是无效的(比如签了别人的名),或者是过期的(好比塞班证书的三年有效期),总之,不能用。JAD是分系统的:同样的一个JAVA软件(JAD+JAR),安在S60手机上,可以提高权限,安在S80手机上,却不行。这点类似塞班证书,只不过塞班证书更严格而已,一部手机一个证书。比如anyview,在我的N73上就可以提高权限,在9300(S80系统)上就不行,后来联系了作者,作者专门为9300做了一个JAD证书才解决JAD是要花钱的:就像塞班的开发者证书需要花钱购买一样,JAD也一样。现在很多论坛都帮大家免费制作塞班证书,但是追本溯源,最开始的那个证书,还是用钱买来的。作为JAVA软件的作者,如果你想让你的软件拥有一个高权限的JAD证书,那就得用一个东西来制作这个证书,而那个用来做JAD证书的东西,一年费用好像是4000。同一个软件,一个使用流畅,没有任何提示框,一个频繁d出提示框,作为使用者,你想选哪个?肯定是前者了所以,对软件作者来说,都想拥有高权限JAD,这对软件的推广非常重要因此,和S60论坛经常能看到的求证书帖一样(现在论坛都给大家免费做证书,这种帖子少见了,以前可是很多的),JAVA论坛也能看到求证书帖,不过那都是没证书的软件开发者,向有证书的软件开发者求助因为大部分JAVA软件的作者,都是出于兴趣免费制作发布,让大家免费使用的,对于他们来说,自己再往里投入4000一年的费用,实在不划算,但是有些软件作者是职业开发者,靠这个吃饭,人家就买了那东西,就能制作高权限JAD而且这个制作比较变态,同一个软件的每个版本,都得重新制作JAD,所以可能会存在这种情况,上一版是高权限,出了新版,反而低权限了。这说明软件作者上一版找到了个雷锋,这一版没找到,呵呵和塞班证书类似,这种热心行为也是有风险的。塞班证书的存在,是S60系统没有病毒(迄今为止没有)的原因之一,JAD也一样。如果你随便帮别人做了证书,那你就得对这个证书负责。如果那人存心不良,开发的是8楼说的那种暗地发送短信扣费软件,那就惨了。到时候,如果真的追究起来,技术高手是能从这个软件的JAD文件追查到当初做证书的那个人的。1,破解手机系统2,安装“RomPatcher 汉化版”(如果以前安过,先卸载)。这软件已经签了binpda的根证书,如果你手机已经替换过binpda的根证书,可以直接安装,或者利用自己的根证书签名,或者利用installserver3,下载“通用文件到C盘补丁(C2Z)”,将解压出的所有文件都放到同一个文件夹下,这其中有个c2z.exe文件4,将z:\sys\bin\EFSrv.dll复制出来,和c2z.exe放在同一文件夹下,运行c2z.exe,生成1个补丁文件rc2z.rmp,复制到手机存储卡:\patches目录(没有这个文件夹就自己新建),运行rompatcher,启用补丁5,下载java_permissions.zip,解压,得到两个xpf文件,复制到手机C:\System\data\midp2\security\policy下面(没有这个文件夹就自己新建)破解成功从此以后,安任何JAVA软件,都不再需要JAD,可以直接用JAR安装。使用过程中不会出现任何提示框(当然,是在RomPatcher软件启动且补丁启用的前提下)去程序管理找到这个JAVA软件,点套件设置,你会发现,所有权限,都默认为总是允许这比用JAD安装所能获得的权限还要高用JAD安装,只能是把读取、编辑、联网等设为总是允许,信息的最高权限还是每次询问,而且程序自动启动和联网这两项的权限有冲突,其中一个选了总是允许,那么另一个就不能选总是允许了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11352688.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存