记录|Jeesite权限处理,权限分配,根据不同的用户展示不同的信息,按钮权限等

jeesite关于权限这方面的记录或者文章很少,看官方文档又看不懂。自己的业务又需要进行权限处理,怎么办,当然问大佬了。 我就记录下我的解决办法,给jeesite权限方面的文章做点贡献!!
我先说下我的业务逻辑。我需要实现不同公司的人登陆后台,只能看到属于自己公司的数据。然而后台管理员可以看到全部的。怎么处理呢?往下看!

  1. 第一步,我们先创建一个机构(也可以不创建),再创建公司,因为公司不同 所以需要几个同级但是公司不同的公司,有点绕 希望能明白,看下图记录|Jeesite权限处理,权限分配,根据不同的用户展示不同的信息,按钮权限等
    文章图片
  2. 接着创建一个角色 这个角色作为管理员用户记录|Jeesite权限处理,权限分配,根据不同的用户展示不同的信息,按钮权限等
    文章图片
  3. 创建用户 创建一个管理员用户记录|Jeesite权限处理,权限分配,根据不同的用户展示不同的信息,按钮权限等
    文章图片
  4. 创就管理员用户这里需要注意点结构选择最高级的,比如我只需要按公司来分配数据,那么我就创建一个结构就好了,这行机构就是这个应用的公司就好了。然后他的所属公司如果你也有创建那么也是一样,选择属于他的就好了、下面有个分配角色 这个角色就是刚刚我们创建的管理员用户,我这里是第二个,你们的找到自己的。记录|Jeesite权限处理,权限分配,根据不同的用户展示不同的信息,按钮权限等
    文章图片
  5. 创建好后就可以看到上图这样了的,我们选择刚刚创建的游湖点击最后一个箭头,选择数据权限,再看下图记录|Jeesite权限处理,权限分配,根据不同的用户展示不同的信息,按钮权限等
    文章图片
  6. 这里呢我们给这个用户增加权限,因为这是个管理员,所以把所有机构和公司都点上,他就有这些机构和公司的全部数据和权限
  7. 上面就是创建管理员的操作,创建普通员工和上面一样,如果你要根据机构啊,公司啊什么的来分配权限的话那就创建用户的时候分配权限选择对应的结构和公司,或者机构 或者公司就好了。注意:创建角色的时候也应该给他分配数据权限,可以让普通用户和管理员用户在角色和用户设置里处于平级。 上面我们是在jeesite的后台设置里操作,那些东西配置好后并不会生效,所以我们需要增加代码。往下看。
  8. 实体 Entity 这里为了精简,我删除了部分代码。
    import java.util.Date; /** * 活动信息表Entity * * @author gkh * @version 2019-01-16 */ @Table(name = "activity", alias = "a", columns = { @Column(name = "id", attrName = "id", label = "id", isPK = true), @Column(name = "activity_title", attrName = "activityTitle", label = "活动标题", ), @Column(name = "company_code", attrName = "companyCode", label = "对应公司"), @Column(includeEntity = DataEntity.class), }, joinTable = { @JoinTable( type = Type.LEFT_JOIN, entity = GradeStandard.class, alias = "b", attrName = "gradeStandard", on = "a.grade_standard_ids = b.id", columns = {@Column(includeEntity = GradeStandard.class)}), }, extWhereKeys = "dsf", orderBy = "a.update_date DESC") public class Activity extends DataEntity {private static final long serialVersionUID = 1L; private String activityTitle; // 活动标题 private String activityContent; // 活动内容private String companyCode; //对应公司Code private UserInfo userInfo; public UserInfo getUserInfo() { return userInfo; }public void setUserInfo(UserInfo userInfo) { this.userInfo = userInfo; }public Activity() { this(null); }public Activity(String id) { super(id); }public String getCompanyCode() { return companyCode; }public void setCompanyCode(String companyCode) { this.companyCode = companyCode; } }

    上面是实体里一些属性,因为我是根据公司来判断谁能看见哪些数据的,所以我加了一个属性company_code对应的是jeesite系统表的js_sys_company的company_code字段,这里有人要问了,我怎么知道我的这个用户对应哪个公司?我想说,你刚刚配置用户的不是配置了吗???这哈晓得配置数据权限范围是啥意思了吧。并且呢我在@Table后加了
    extWhereKeys = "dsf" 这个东西你要问我是啥,我只能说去看文档,加了这个后我们再去service层

  9. @Override public Page findPage(Activity activity) { activity.getSqlMap().getDataScope().addFilter("dsf", "Company", "a.company_code", DataScope.CTRL_PERMI_HAVE); return super.findPage(activity); }

    这只是我service的一个findPage方法 是jeesite自己生层的,分页和查询全部数据的一个方法。我加了一个
activity.getSqlMap().getDataScope().addFilter("dsf", "Company", "a.company_code",
DataScope.CTRL_PERMI_HAVE);
  1. 记录|Jeesite权限处理,权限分配,根据不同的用户展示不同的信息,按钮权限等
    文章图片
  2. 1.你的参数,2.刚刚实体里写的,3.你想根据什么表进行关联查询的表名,我是根据公司,所以写了Company,最后一个是关联字段名,我在实体里加了company_code.,这串代码怎么说呢,其实是在这个findPage的SQL后加了一个查询条件。这样呢我就可以查询到特动公司的用户在我的列表数据里只能看到他公司的了。要细化到个人或者机构的话那就换表进行了。之所以卸载findPage里面是因为我就用系统的了。不想自己写。你可以单独写方法自己随便调用就好了
上面我们介绍了单表的数据权限过滤,然后多表的呢?我们先理清一下业务。
具体是这样的,我有两张表,一张活动表有活动信息,一张报名表有用户信息,用户报名活动记录到报名表,报名表里记录报名,报名的什么活动,谁报名的。因为我的业务需求是只有自己公司的人才能看到自己的数据,那么报名了这个公司的活动相应的也只有这个公司的人才能看的到谁报名的,怎么做呢?看代码
Entity
@Table(name = "activity_apply", alias = "a", columns = {@Column(name = "activity_id", attrName = "activityId", label = "活动id"),@Column(name = "apply_user_id", attrName = "applyUserId", label = "申请人"),},joinTable = @JoinTable( type = Type.LEFT_JOIN, alias = "b", entity = Activity.class, attrName = "activity", columns = {@Column(includeEntity = Activity.class)}, on = "a.activity_id = b.id" ), extWhereKeys="dsfCompany",orderBy = "a.update_date DESC" )

在这里我加了extWhereKeys="dsfCompany",这个和上面不一样了哦,不要只看这个还要看到哦JoinTable,这里通过两id进行了查询
@Override public Page findPage(ActivityApply activityApply) { activityApply.getSqlMap().getDataScope().addFilter("dsfCompany", "Company", "b.company_code", "a.create_by", DataScope.CTRL_PERMI_HAVE); return super.findPage(activityApply);

service和上面一样,我也只是加在了findPage里,但是参数不一样了,我要查询的表是a大家看实体就可以看到别名了,但我这里个a里是没有company_code的 可是我连接了表b ,b是有这个字段的,所以我写了b.company_code,再后面一个参数应该是a.b的id(我是简写不要以为是这样) 然后就可以了。
这就是数据权限过滤,根据自己需求弄附上官方的说明
记录|Jeesite权限处理,权限分配,根据不同的用户展示不同的信息,按钮权限等
文章图片

【记录|Jeesite权限处理,权限分配,根据不同的用户展示不同的信息,按钮权限等】按钮权限我下次再说,现在吹我快点部署了。。。。溜了

    推荐阅读