权限管理应该怎么写呢

时间:2021-04-23 15:17:41
项目中有个权限管理,需求是 ,都是复选框,选中的时候,判断该用户是否有这个权限,有的话就不动,没有的就插入,以i安有的,现在勾掉的,就删除,应该怎么弄啊,我想了2天了,还是没想出来这个逻辑应该怎么写

17 个解决方案

#1


这哪儿是什么权限管理,就是普通的添加和删除嘛。
添加之前要进行判断一下有没有相应的数据,
删除就是将其删除。
只不过你这里可能要配合界面的复选框,展现一下而已。

#2


引用 1 楼 fly_m 的回复:
这哪儿是什么权限管理,就是普通的添加和删除嘛。
添加之前要进行判断一下有没有相应的数据,
删除就是将其删除。
只不过你这里可能要配合界面的复选框,展现一下而已。


嗯嗯,差不多这个意思,但是就是比较迷惑,应该怎么去比较呢,数据都是在数据库里查询出来的

#3


#4


新加入的菜鸟,多多体谅啊,问题可能比较简单···

#5


最简单的方法,每次都把指定用户的权限全部删除,然后根据新选择的权限重新insert

#6


先把数据库表 设计出来吧
这是我之前做的
OP操作员
序号 列名 数据类型 长度 空? 说明
1 OP_ID numeric 20 否 PK
2 GROUP_ID numeric 20 是 FK
3 ROLE_ID numeric 20 是 FK
4 OP_NAME varchar 20 是
5 PWD varchar 20 是 登录密码
6 ADD_TIME datetime 8 是 发生时间
7 ISDELETE Bit 1 否 是否删除
OP_GROUP部门表
序号 列名 数据类型 长度 空? 说明
1 GROUP_ID numeric 20 否 PK
2 GROUP_NAME varchar 50 是
3 ADD_TIME datetime 8 是 发生时间
4 ISDELETE Bit 1 否 是否删除
OP_ROLE操作角色对应表
序号 列名 数据类型 长度 空? 说明
1 ID numeric 20 否 PK
2 OP_ID numeric 9 是 FK
3 ROLE_ID numeric 9 是 FK
4 STATUS int 1 是
5 ISDELETE Bit 1 否 是否删除
ROLE角色
序号 列名 数据类型 长度 空? 说明
1 ROLE_ID numeric 20 否 PK
2 GROUP_ID numeric 20 是 部门ID
3 ROLE_NAME varchar 50 是 访问权限: admin/guest
4 ADD_DATE datetime 8 是
5 ISDELETE Bit 1 否 是否删除
ROLE_PERMISSION角色权限
序号 列名 数据类型 长度 空? 说明
1 ID numeric 20 否 PK
2 ROLE_ID numeric 20 是 FK
3 RES_ID numeric 20 是 FK
4 PERMISSION varchar 20 是 权限(admin:超级权限, guest:只读)
5 STATUS int 1 是 状态(0:没有权限; 1:有权限)
7 ISDELETE Bit 1 否 是否删除
RES_ALLOC资源分配表
序号 列名 数据类型 长度 空? 说明
1 ID numeric 20 否 PK
2 RES_ID numeric 20 是 FK
3 GROUP_ID numeric 20 是 FK
4 STATUS int 1 是 状态(0:不可用; 1:可用)
5 ISDELETE Bit 1 否 是否删除
RESOURCE资源
序号 列名 数据类型 长度 空? 说明
1 RES_ID numeric 20 否 PK
2 PARENT_ID numeric 20 是 父级ID
3 RES_NAME varchar 50 是
4 RES_URL varchar 200 是
5 CONTENT varchar 500 是
6 ADD_TIME datetime 8 是 发生时间
7 ISDELETE Bit 1 否 是否删除

#7


引用 6 楼 ajun_studio 的回复:
先把数据库表 设计出来吧
这是我之前做的
OP操作员
序号 列名 数据类型 长度 空? 说明
1 OP_ID numeric 20 否 PK
2 GROUP_ID numeric 20 是 FK
3 ROLE_ID numeric 20 是 FK
4 OP_NAME varchar 20 是
5 PWD varchar 20 是 登录密码
6 ADD_TIME datetime……

表有的啊,就一张中间表啦,嘿嘿,里面就2个ID,别的木有,5楼的是可以实现,但是····,有点无语

坐等,看看还有没有更好的解决方法

#8


不知道LZ用过merge没有,用merge语句就ok了,

详细的我就不仔细说了,可以搜一下,完全可以实现你说的功能,不用像五楼说的先删除再添加,而是可以直接添加!

#9


引用 8 楼 yyyy_mm_dd 的回复:
不知道LZ用过merge没有,用merge语句就ok了,

详细的我就不仔细说了,可以搜一下,完全可以实现你说的功能,不用像五楼说的先删除再添加,而是可以直接添加!

额···,你看我之前发过了一个帖子就知道咯,我问过同一个问题的,上次是一个merge的方法,但是没看懂

--a为中间表,b为传入数据的表
merge into tab1 a
using tab2 b
on (a.aid=b.aid and a.bid=b.bid)
when not matched then
  insert values (b.aid,b.bid); 


这个是当时他们给我的sql,但是,tab2表是什么啊?不懂

#10


Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 
Connected as study

SQL> select * from subs;

      MSID MS_TYPE AREACODE
---------- ------- --------
 905310001 0            531
 905320001 1            532
 905330001 2            533

SQL> select * from acct;

      MSID BILL_MONTH AREACODE        FEE
---------- ---------- -------- ----------

SQL> 
SQL> merge into acct a
  2       using subs b on (a.msid=b.msid)
  3     when MATCHED then
  4          update set a.areacode=b.areacode
  5     when NOT MATCHED then
  6          insert(msid,bill_month,areacode) 
  7          values(b.msid,'200702',b.areacode);

Done

SQL> select * from acct;

      MSID BILL_MONTH AREACODE        FEE
---------- ---------- -------- ----------
 905320001     200702      532       0.00
 905330001     200702      533       0.00
 905310001     200702      531       0.00

SQL> insert into subs values(905340001,3,534);

1 row inserted

SQL> select * from subs;

      MSID MS_TYPE AREACODE
---------- ------- --------
 905340001 3            534
 905310001 0            531
 905320001 1            532
 905330001 2            533

SQL> 
SQL> merge into acct a
  2       using subs b on (a.msid=b.msid)
  3     when NOT MATCHED then
  4          insert(msid,bill_month,areacode) 
  5          values(b.msid,'200702',b.areacode);

Done

SQL> select * from acct;

      MSID BILL_MONTH AREACODE        FEE
---------- ---------- -------- ----------
 905320001     200702      532       0.00
 905330001     200702      533       0.00
 905310001     200702      531       0.00
 905340001     200702      534       0.00

SQL> update subs set areacode=999;

4 rows updated

SQL> select * from subs;

      MSID MS_TYPE AREACODE
---------- ------- --------
 905340001 3            999
 905310001 0            999
 905320001 1            999
 905330001 2            999

SQL> select * from acct;

      MSID BILL_MONTH AREACODE        FEE
---------- ---------- -------- ----------
 905320001     200702      532       0.00
 905330001     200702      533       0.00
 905310001     200702      531       0.00
 905340001     200702      534       0.00

SQL> 
SQL> merge into acct a
  2       using subs b on (a.msid=b.msid)
  3     when MATCHED then
  4          update set a.areacode=b.areacode;

Done

SQL> select * from acct;

      MSID BILL_MONTH AREACODE        FEE
---------- ---------- -------- ----------
 905320001     200702      999       0.00
 905330001     200702      999       0.00
 905310001     200702      999       0.00
 905340001     200702      999       0.00

SQL> 



看看,能看明白不

#11


学习。。。。。

#12


引用 10 楼 yyyy_mm_dd 的回复:
SQL code
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 
Connected as study

SQL> select * from subs;

      MSID MS_TYPE AREACODE
---------- ------- --------
 905310001 0   ……


差不多了,但是,这个merge方法可以执行前台传来的东西里没有,而数据库里有的删除吗?

#13


我还没研究过权限呢!啥时候做一个试试

#14


你可以使用update啊  不管原来有没有这个权限,都可以实现你的功能

#15


引用 12 楼 podongxi777442156445 的回复:
差不多了,但是,这个merge方法可以执行前台传来的东西里没有,而数据库里有的删除吗?


没看明白你想表达什么……

#16


1.每个权限都有一个ID
2.进入赋权页面前,先取得当前用户的所有权限,然后在权限树中已有的权限就勾选
3.提交后,获取所有选择的权限
4.先在数据库中删除当前用户拥有的权限,然后再把勾选的权限赋给当前用户
5.完事!

#17


直接先删除在添加,数据量很大吗?就两行代码搞完的事,何必整的那么复杂

#1


这哪儿是什么权限管理,就是普通的添加和删除嘛。
添加之前要进行判断一下有没有相应的数据,
删除就是将其删除。
只不过你这里可能要配合界面的复选框,展现一下而已。

#2


引用 1 楼 fly_m 的回复:
这哪儿是什么权限管理,就是普通的添加和删除嘛。
添加之前要进行判断一下有没有相应的数据,
删除就是将其删除。
只不过你这里可能要配合界面的复选框,展现一下而已。


嗯嗯,差不多这个意思,但是就是比较迷惑,应该怎么去比较呢,数据都是在数据库里查询出来的

#3


#4


新加入的菜鸟,多多体谅啊,问题可能比较简单···

#5


最简单的方法,每次都把指定用户的权限全部删除,然后根据新选择的权限重新insert

#6


先把数据库表 设计出来吧
这是我之前做的
OP操作员
序号 列名 数据类型 长度 空? 说明
1 OP_ID numeric 20 否 PK
2 GROUP_ID numeric 20 是 FK
3 ROLE_ID numeric 20 是 FK
4 OP_NAME varchar 20 是
5 PWD varchar 20 是 登录密码
6 ADD_TIME datetime 8 是 发生时间
7 ISDELETE Bit 1 否 是否删除
OP_GROUP部门表
序号 列名 数据类型 长度 空? 说明
1 GROUP_ID numeric 20 否 PK
2 GROUP_NAME varchar 50 是
3 ADD_TIME datetime 8 是 发生时间
4 ISDELETE Bit 1 否 是否删除
OP_ROLE操作角色对应表
序号 列名 数据类型 长度 空? 说明
1 ID numeric 20 否 PK
2 OP_ID numeric 9 是 FK
3 ROLE_ID numeric 9 是 FK
4 STATUS int 1 是
5 ISDELETE Bit 1 否 是否删除
ROLE角色
序号 列名 数据类型 长度 空? 说明
1 ROLE_ID numeric 20 否 PK
2 GROUP_ID numeric 20 是 部门ID
3 ROLE_NAME varchar 50 是 访问权限: admin/guest
4 ADD_DATE datetime 8 是
5 ISDELETE Bit 1 否 是否删除
ROLE_PERMISSION角色权限
序号 列名 数据类型 长度 空? 说明
1 ID numeric 20 否 PK
2 ROLE_ID numeric 20 是 FK
3 RES_ID numeric 20 是 FK
4 PERMISSION varchar 20 是 权限(admin:超级权限, guest:只读)
5 STATUS int 1 是 状态(0:没有权限; 1:有权限)
7 ISDELETE Bit 1 否 是否删除
RES_ALLOC资源分配表
序号 列名 数据类型 长度 空? 说明
1 ID numeric 20 否 PK
2 RES_ID numeric 20 是 FK
3 GROUP_ID numeric 20 是 FK
4 STATUS int 1 是 状态(0:不可用; 1:可用)
5 ISDELETE Bit 1 否 是否删除
RESOURCE资源
序号 列名 数据类型 长度 空? 说明
1 RES_ID numeric 20 否 PK
2 PARENT_ID numeric 20 是 父级ID
3 RES_NAME varchar 50 是
4 RES_URL varchar 200 是
5 CONTENT varchar 500 是
6 ADD_TIME datetime 8 是 发生时间
7 ISDELETE Bit 1 否 是否删除

#7


引用 6 楼 ajun_studio 的回复:
先把数据库表 设计出来吧
这是我之前做的
OP操作员
序号 列名 数据类型 长度 空? 说明
1 OP_ID numeric 20 否 PK
2 GROUP_ID numeric 20 是 FK
3 ROLE_ID numeric 20 是 FK
4 OP_NAME varchar 20 是
5 PWD varchar 20 是 登录密码
6 ADD_TIME datetime……

表有的啊,就一张中间表啦,嘿嘿,里面就2个ID,别的木有,5楼的是可以实现,但是····,有点无语

坐等,看看还有没有更好的解决方法

#8


不知道LZ用过merge没有,用merge语句就ok了,

详细的我就不仔细说了,可以搜一下,完全可以实现你说的功能,不用像五楼说的先删除再添加,而是可以直接添加!

#9


引用 8 楼 yyyy_mm_dd 的回复:
不知道LZ用过merge没有,用merge语句就ok了,

详细的我就不仔细说了,可以搜一下,完全可以实现你说的功能,不用像五楼说的先删除再添加,而是可以直接添加!

额···,你看我之前发过了一个帖子就知道咯,我问过同一个问题的,上次是一个merge的方法,但是没看懂

--a为中间表,b为传入数据的表
merge into tab1 a
using tab2 b
on (a.aid=b.aid and a.bid=b.bid)
when not matched then
  insert values (b.aid,b.bid); 


这个是当时他们给我的sql,但是,tab2表是什么啊?不懂

#10


Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 
Connected as study

SQL> select * from subs;

      MSID MS_TYPE AREACODE
---------- ------- --------
 905310001 0            531
 905320001 1            532
 905330001 2            533

SQL> select * from acct;

      MSID BILL_MONTH AREACODE        FEE
---------- ---------- -------- ----------

SQL> 
SQL> merge into acct a
  2       using subs b on (a.msid=b.msid)
  3     when MATCHED then
  4          update set a.areacode=b.areacode
  5     when NOT MATCHED then
  6          insert(msid,bill_month,areacode) 
  7          values(b.msid,'200702',b.areacode);

Done

SQL> select * from acct;

      MSID BILL_MONTH AREACODE        FEE
---------- ---------- -------- ----------
 905320001     200702      532       0.00
 905330001     200702      533       0.00
 905310001     200702      531       0.00

SQL> insert into subs values(905340001,3,534);

1 row inserted

SQL> select * from subs;

      MSID MS_TYPE AREACODE
---------- ------- --------
 905340001 3            534
 905310001 0            531
 905320001 1            532
 905330001 2            533

SQL> 
SQL> merge into acct a
  2       using subs b on (a.msid=b.msid)
  3     when NOT MATCHED then
  4          insert(msid,bill_month,areacode) 
  5          values(b.msid,'200702',b.areacode);

Done

SQL> select * from acct;

      MSID BILL_MONTH AREACODE        FEE
---------- ---------- -------- ----------
 905320001     200702      532       0.00
 905330001     200702      533       0.00
 905310001     200702      531       0.00
 905340001     200702      534       0.00

SQL> update subs set areacode=999;

4 rows updated

SQL> select * from subs;

      MSID MS_TYPE AREACODE
---------- ------- --------
 905340001 3            999
 905310001 0            999
 905320001 1            999
 905330001 2            999

SQL> select * from acct;

      MSID BILL_MONTH AREACODE        FEE
---------- ---------- -------- ----------
 905320001     200702      532       0.00
 905330001     200702      533       0.00
 905310001     200702      531       0.00
 905340001     200702      534       0.00

SQL> 
SQL> merge into acct a
  2       using subs b on (a.msid=b.msid)
  3     when MATCHED then
  4          update set a.areacode=b.areacode;

Done

SQL> select * from acct;

      MSID BILL_MONTH AREACODE        FEE
---------- ---------- -------- ----------
 905320001     200702      999       0.00
 905330001     200702      999       0.00
 905310001     200702      999       0.00
 905340001     200702      999       0.00

SQL> 



看看,能看明白不

#11


学习。。。。。

#12


引用 10 楼 yyyy_mm_dd 的回复:
SQL code
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 
Connected as study

SQL> select * from subs;

      MSID MS_TYPE AREACODE
---------- ------- --------
 905310001 0   ……


差不多了,但是,这个merge方法可以执行前台传来的东西里没有,而数据库里有的删除吗?

#13


我还没研究过权限呢!啥时候做一个试试

#14


你可以使用update啊  不管原来有没有这个权限,都可以实现你的功能

#15


引用 12 楼 podongxi777442156445 的回复:
差不多了,但是,这个merge方法可以执行前台传来的东西里没有,而数据库里有的删除吗?


没看明白你想表达什么……

#16


1.每个权限都有一个ID
2.进入赋权页面前,先取得当前用户的所有权限,然后在权限树中已有的权限就勾选
3.提交后,获取所有选择的权限
4.先在数据库中删除当前用户拥有的权限,然后再把勾选的权限赋给当前用户
5.完事!

#17


直接先删除在添加,数据量很大吗?就两行代码搞完的事,何必整的那么复杂