当前位置: 首页 > 知识库问答 >
问题:

Apache Shiro-自定义jdbc领域-读取角色/权限

黄毅
2023-03-14

我正在将Apache Shiro实现到我的web应用程序中,在启动时遇到了问题。

我想从postgreSQL数据库加载角色和权限,并检查用户是否具有角色/权限。

我的角色权利系统包括以下内容:

用户-

角色-

可以将角色分配给多个用户

用户角色分配始终与其他两个条件相关:

  • 一个组织单位(在我的例子中称为OE)
  • 一个学院

因此,用户“教员管理员”基本上可能有以下内容:

  • 角色OE-管理员,拥有OE:3和教师:员工的所有权利

所以他可以说OE“3”的教员“员工”的“manage\u Users”

我知道如何在shiro.ini文件中实现角色,但是因为我在数据库中有我的角色/权限(权限),所以我需要它们从那里加载。

在Shiro的快速入门示例中,有以下示例:

# The 'goodguy' role is allowed to 'drive' (action) the winnebago (type) with
# license plate 'eagle5' (instance specific id)
goodguy = winnebago:drive:eagle5

如果我将此示例应用于我的情况,我会得到以下结果:

# The 'OE-Admin' role is allowed to 'manage_users' of OE '3' (type) with
# faculty 'staff'
OE-Admin = 3:manage_users:staff

我的角色定义如下:

角色=OE:右:教师(或者按顺序改变他们,真的很重要)

现在最大的问题是:我如何从我的数据库中“加载”我的角色/权限,以获得角色的这种规定格式及其权限??

到目前为止,我在shiro内部有以下内容。ini:

ds = org.postgresql.Driver
ds.serverName = localhost
ds.user = admin
ds.password = admin
ds.databaseName = db_name
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource = $ds
jdbcRealm.permissionsLookupEnabled = true

我知道必须有一个类似“jdbcRealm.userRolesQuery=SELECT…”的条目但我不知道如何加载角色的方式,我如上所述。

它是否只是. ini文件的一个条目,它将等效于这样的静态角色集:古德盖=winnebago:驱动器: eagle5

或者需要采取哪些步骤来实现这一点?

有没有人对Apache Shiro有更多的经验可以帮助我?有一些教程,但我发现很难遵循它们来创建带有owm角色的自定义jdbc领域

编辑:数据库结构:

用户:

id serial NOT NULL,
"user" character varying(50) NOT NULL,
CONSTRAINT umgmt_users_pkey PRIMARY KEY (id)

角色:

id serial NOT NULL,
role character varying(50) NOT NULL,
priv_level integer NOT NULL,
CONSTRAINT umgmt_roles_pkey PRIMARY KEY (id)

权利(权限):

id serial NOT NULL,
"right" character varying(50) NOT NULL,
CONSTRAINT umgmt_rights_pkey PRIMARY KEY (id)

以防万一,这是我的表,我在其中存储用户-角色-OE Fac关系

id serial NOT NULL,
user_id integer NOT NULL,
oe_id integer NOT NULL,
fac_id integer NOT NULL,
role_id integer NOT NULL,
assigned_by_priv_level integer NOT NULL,
CONSTRAINT umgmt_user_oe_fac_role_pkey PRIMARY KEY (id),
CONSTRAINT fac_fkey FOREIGN KEY (fac_id)
  REFERENCES umgmt_facultys (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT oe_fkey FOREIGN KEY (oe_id)
  REFERENCES umgmt_oes (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT role_fkey FOREIGN KEY (role_id)
  REFERENCES umgmt_roles (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT user_fkey FOREIGN KEY (user_id)
  REFERENCES umgmt_users (id) MATCH SIMPLE
  ON UPDATE NO ACTION ON DELETE NO ACTION

共有1个答案

陶征
2023-03-14

好吧,在与RevXaisks长时间讨论之后,我会再睡一晚,但我认为Shiro在角色/权限检查方面不符合我的需要。谢谢你,伙计,你很有耐心。

 类似资料:
  • 我正试图将我的UserDAO注入到ApacheShiro正在使用的自定义授权域中,但是。。。我得到空值。 我做错了什么? 西罗。伊尼 jparelm。JAVA 我必须做些什么才能让CDI在我的自定义域中意识到@Inject并正确地注入我的UserDAO?

  • 自定义角色:只有团队负责人、团队管理员和地图管理员三个角色可以创建自定义角色,可以自定义角色的名称和权限。 自定义角色分为: 自定义地图角色:对地图级别进行权限设置 自定义图层角色:对图层级别进行权限设置 自定义子图层角色:对子图层级别进行权限设置 自定义业务流角色:对业务流层级进行权限设置 1.创建自定义角色: 以地图角色创建为例,点击“创建新角色”,出现创建创建新角色的弹框。点击“地图角色”。

  • 我有一些自定义角色,例如: 当使用'ROLE_USER'时,“spans”中的文本可以正常显示,但当使用其他角色时,文本无法显示。然后我在自定义角色中添加'ROLE_'前缀,它又变得正常了。 我尝试删除“ROLE\uu0”前缀约束,如下所示: 它也不起作用。知道如何删除强制的“ROLE\uuux”前缀吗?

  • 我已经基于命名的路由为Laravel(4.2)创建了自定义角色管理器,例如: 基本上,任何注册为

  • 问题内容: 在将旧版应用程序迁移到Spring Security时,出现以下异常: 在旧的应用程序中,角色有“超级管理员”,“编辑者”,“帮助台”等。但是在所有Spring Security示例中,我仅看到诸如“ ROLE _”(“ ROLE_ADMIN”等)的角色。当我将“ superadmin”重命名为“ ROLE_ADMIN”并且仅在配置中使用此角色时,一切正常。 不起作用: 作品: 可以使