權(quán)限系統(tǒng)_數(shù)據(jù)權(quán)限控制

1、使用 query filter

先舉例說明一下數(shù)據(jù)權(quán)限,假設(shè)一個(gè)工作任務(wù)應(yīng)用有以下的需求:

普通員工可以查看自己的工作項(xiàng)
部門經(jīng)理可以查看自己管理部門的所有工作項(xiàng)
對(duì)于普通員工和部門經(jīng)理,他們?cè)L問應(yīng)用的入口都是相同的,應(yīng)用需要根據(jù)不同的角色返回不一樣的數(shù)據(jù)結(jié)果,這就是數(shù)據(jù)權(quán)限控制。

數(shù)據(jù)權(quán)限是個(gè)比較復(fù)雜的問題,規(guī)則非常靈活,在Leap中并沒有內(nèi)置實(shí)現(xiàn),但提供了一個(gè)基礎(chǔ)機(jī)制,可以相對(duì)簡(jiǎn)單的實(shí)現(xiàn)數(shù)據(jù)權(quán)限。

1.1 查詢過濾器(Query Filter)

查詢過濾器是 ORM 模塊中的功能,默認(rèn)是關(guān)閉的,開啟后所有的查詢語(yǔ)句都會(huì)在 where 語(yǔ)句的最后自動(dòng)加上類似 @filter(User) 的表達(dá)式。

假設(shè)執(zhí)行查詢語(yǔ)句:

select * from user u where u.name = :name
那么開啟 Query Filter 后將會(huì)自動(dòng)變?yōu)椋?/p>

select * from user u where ( u.name = :name ){? and ( @filter(User) )}
關(guān)于查詢過濾器的細(xì)節(jié)在這里不展開細(xì)說,下面具體說明如何使用查詢過濾器實(shí)現(xiàn)數(shù)據(jù)權(quán)限。

1.2 基于 Query Filter 實(shí)現(xiàn)數(shù)據(jù)權(quán)限

1.3 開啟

修改 src/main/resources/conf/config.xml ,增加以下配置屬性:

<properties prefix="orm">
<property name="query_filter.enabled" value="true"/>
</properties>
1.4 實(shí)現(xiàn)

編寫類 SecurityQueryFilter.java :

package hello.beans;
import leap.lang.params.Params;
import leap.orm.sql.Sql;
import leap.orm.sql.SqlContext;
import leap.orm.sql.SqlTag;
import leap.orm.sql.SqlTagProcessor;
public class SecurityQueryFilter implements SqlTagProcessor {

@Override
public String processTag(SqlContext context, Sql sql, SqlTag tag, Params params) {
    String entityName = tag.getContent();
    if(entityName.equals("User")) {
        return "t.id = #{env.user.id}";
    }
    return null;
}

}
返回的表達(dá)式語(yǔ)法請(qǐng)看數(shù)據(jù)訪問章節(jié),其中別名 t. 是固定寫法,在執(zhí)行中會(huì)被替換為真正的別名。

配置 bean 生效:

<bean name="filter" type="leap.orm.sql.SqlTagProcessor" class="hello.beans.SecurityQueryFilter"/>

2.使用sqlMAP進(jìn)行sql拼接
其原理也是sql拼接 不寫了

參考地址:http://leapframework.org/doc/security/op_perm.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容