成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ovirt筆記:通過登錄策略配置模塊來熟悉系統(tǒng)的框架

Loong_T / 1333人閱讀

摘要:最近在寫登錄策略配置模塊,現(xiàn)在通過分析登錄策略配置模塊來說明系統(tǒng)的層次結(jié)構(gòu)。這樣實(shí)現(xiàn)起來簡單明了,不過由于是根據(jù)角色定義登錄限制策略,同一種角色只有一種登錄限制策略,對(duì)不同用戶暫時(shí)不能做到多樣性控制,后期再修正。

最近在寫登錄策略配置LoginConfig模塊,現(xiàn)在通過分析登錄策略配置模塊來說明系統(tǒng)的層次結(jié)構(gòu)。系統(tǒng)后臺(tái)主要包括四層:

1. 數(shù)據(jù)庫層:包括表、存儲(chǔ)過程、實(shí)體類
2. 數(shù)據(jù)訪問層:數(shù)據(jù)訪問對(duì)象(也就是Dao層)
3. 后端邏輯層:查詢與命令類
4. Rest接口層:資源類
數(shù)據(jù)庫層

登錄限制策略模塊包括一張login_configs表,6個(gè)存儲(chǔ)過程(Insertloginconfigs,Updateloginconfigs,Deleteloginconfigs,GetAllFromloginconfigs,GetloginconfigsById和GetloginconfigsByName),以及一個(gè)LoginConfis的實(shí)體類
LoginConfigs表格只有6個(gè)字段,在create_tables.sql中創(chuàng)建表格

//create_tables.sql
CREATE TABLE login_configs (
    loginconfig_id uuid NOT NULL,
    role_name character varying(255) NOT NULL,
    time_limit character varying(4000),
    ip_limit character varying(4000),
    mac_limit character varying(4000),
    other character varying(4000)
);

存儲(chǔ)過程:比如增加Insertloginconfigs

CREATE OR REPLACE FUNCTION Insertloginconfigs(
    v_loginconfig_id uuid,
    v_role_name VARCHAR(255),
    v_time_limit VARCHAR(4000),
    v_ip_limit VARCHAR(4000),
    v_mac_limit VARCHAR(4000),
    v_other VARCHAR(4000)
  )RETURNS VOID AS $PROCEDURE$
BEGIN
    INSERT INTO login_configs (loginconfig_id,role_name,time_limit,ip_limit,mac_limit,other)
    VALUES (v_loginconfig_id,v_role_name,pgp_sym_encrypt(v_time_limit,"engine"),pgp_sym_encrypt(v_ip_limit,"engine"),pgp_sym_encrypt(v_mac_limit,"engine"),pgp_sym_encrypt(v_other,"engine"));
END;$PROCEDURE$
LANGUAGE plpgsql;

實(shí)體類LoginConfig

public class LoginConfigs implements IVdcQueryable, BusinessEntity{
    private static final long serialVersionUID = 3090608330047174149L;
    //進(jìn)程Id
    private Guid id;
    @Override
    public Guid getId() {
        return id;
    }
    @Override
    public void setId(Guid id) {
        this.id = id;
    }
    //角色名
    private String roleName;
    public String getRoleName() {
        return roleName;
    }
    public void setRoleName(String roleName) {
        this.roleName = roleName;
    }
    //限制時(shí)間
    private String timeLimit;
    public String getTimeLimit() {
        return timeLimit;
    }
    public void setTimeLimit(String timeLimit) {
        this.timeLimit = timeLimit;
    }
    //限制IP
    private String macLimit;
    public String getMacLimit() {
        return macLimit;
    }
    public void setMacLimit(String macLimit) {
        this.macLimit = macLimit;
    }
    //限制IP
    private String ipLimit;
    public String getIpLimit() {
        return ipLimit;
    }
    public void setIpLimit(String ipLimit) {
        this.ipLimit = ipLimit;
    }
    //預(yù)留字段
    private String other;
    public String getOther() {
        return other;
    }
    public void setOther(String other) {
        this.other = other;
    }
    public LoginConfigs(){
        id = Guid.Empty;
        roleName = "";
        timeLimit = "";
        ipLimit = "";
        other = "";
    }
    @Override
    public Object getQueryableId() {
        return getId();
    }
    @Override
    public int hashCode() {
        return Objects.hash(id,roleName,timeLimit,ipLimit,other);
    }
    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (!(obj instanceof LoginConfigs)) {
            return false;
        }
        LoginConfigs configs = (LoginConfigs) obj;
        return Objects.equals(id, configs.id)
                && Objects.equals(roleName, configs.roleName)
                && Objects.equals(timeLimit, configs.timeLimit)
                && Objects.equals(ipLimit, configs.ipLimit)
                && Objects.equals(other, configs.other);
    }
}

添加完LoginConfigs.java后配置在Common.gwt.xml中,否則 將不能被部分包所使用

數(shù)據(jù)訪問層

DbFacade:數(shù)據(jù)庫的外觀器
LoginConfigsDao:數(shù)據(jù)訪問對(duì)象接口層

//LoginConfigsDao.java
public interface LoginConfigsDao extends Dao,SearchDao{
    void save(LoginConfigs loginConfigs);
    void update(LoginConfigs loginConfigs);
    void detele(Guid id);
    LoginConfigs getById(Guid id);
    LoginConfigs getByName(String roleName);
    List getAll();
}

LoginConfigsDaoImpl:數(shù)據(jù)訪問對(duì)象實(shí)現(xiàn)類

public class LoginConfigsDaoImpl extends BaseDao implements LoginConfigsDao{
    private RowMapper loginConfigsRowMapper = (rs ,rowNum) -> {
        LoginConfigs entity = new LoginConfigs();
        entity.setId(getGuidDefaultEmpty(rs,"loginconfig_id"));
        entity.setRoleName(rs.getString("role_name"));
        entity.setTimeLimit(rs.getString("time_limit"));
        entity.setIpLimit(rs.getString("ip_limit"));
        entity.setMacLimit(rs.getString("mac_limit"));
        entity.setOther(rs.getString("other"));
        return entity;
    };
    @Override
    public List getAllWithQuery(String query) {
        return null;
    }
    @Override
    public void save(LoginConfigs loginConfigs) {
        Guid id = loginConfigs.getId();
        if(Guid.isNullOrEmpty(id)){
            id = Guid.newGuid();
            loginConfigs.setId(id);
        }
        getCallsHandler().executeModification("Insertloginconfigs",createFullParametersMapper(loginConfigs ));
    }
    @Override
    public void update(LoginConfigs loginConfigs) {
        getCallsHandler().executeModification("Updateloginconfigs", createFullParametersMapper(loginConfigs));
    }
    @Override
    public void detele(Guid id) {
        getCallsHandler().executeModification("Deleteloginconfigs", createIdParameterMapper(id));
    }
    @Override
    public LoginConfigs getById(Guid id) {
       return getCallsHandler().executeRead("GetloginconfigsById",loginConfigsRowMapper,createIdParameterMapper(id));
    }
    @Override
    public LoginConfigs getByName(String roleName) {
        MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource().addValue("role_name", roleName);
        return getCallsHandler().executeRead("GetloginconfigsByName", loginConfigsRowMapper, parameterSource);
    }
    @Override
    public List getAll() {
        return getCallsHandler().executeReadList("GetAllFromloginconfigs",loginConfigsRowMapper,getCustomMapSqlParameterSource());
    }
    private MapSqlParameterSource createIdParameterMapper(Guid id){
        return getCustomMapSqlParameterSource().addValue("loginconfig_id", id);
    }
    private MapSqlParameterSource createFullParametersMapper(LoginConfigs entity) {
        return createIdParameterMapper(entity.getId())
                .addValue("ip_limit",entity.getIpLimit())
                .addValue("mac_limit",entity.getMacLimit())
                .addValue("time_limit",entity.getTimeLimit())
                .addValue("role_name",entity.getRoleName())
                .addValue("other",entity.getOther());
    }
}
后端邏輯層

后端邏輯層是對(duì)操作命令化,把每種操作請(qǐng)求都封裝成命令的形式
[參數(shù)]

1. LoginConfigsOperationParameters 模塊操作的基本參數(shù)類
2. AddLoginConfigsCommand  添加操作的參數(shù)類
3. RemoveLoginConfigsParameters  更新操作的參數(shù)類
4. UpdateLoginConfigsParameters   刪除操作的參數(shù)類

【查詢與命令】

1. GetAllLoginConfigsQuery   獲取所有登錄策略的查詢類
2. GetLoginConfigByIdQuery  根據(jù)id獲取指定的登錄策略的查詢類
3. GetLoginConfigByNameQuery  根據(jù)角色名獲取指定登錄策略的查詢類
4. AddLoginConfigsCommand  添加LoginConfigs的命令類
5. RemoveLoginConfigsCommand   刪除LoginConfigs的命令類
6. UpdateLoginConfigsCommand  更新LoginConfigs的命令類

【類型】

1. VdcActionType  動(dòng)作類型集合
2. VdcQueryType   查詢類型集合
3. VdcObjectType   對(duì)象類型集合
4. ActionGroup   動(dòng)作組集合
//LoginConfigsOperationParameters.java  是所有操作的參數(shù)類的父類
public class LoginConfigsOperationParameters extends VdcActionParametersBase{
    private static final long serialVersionUID = 3991635679508928037L;
    @Valid
    private LoginConfigs loginConfigs;
    public LoginConfigsOperationParameters(){
    }
    public LoginConfigsOperationParameters(Guid id){
        this.setId(id);
        loginConfigs.setId(id);
    }
    public LoginConfigsOperationParameters(LoginConfigs _loginConfigs){
        loginConfigs = _loginConfigs;
    }
    public Guid getId(){
        return  loginConfigs == null ? null : loginConfigs.getId();
    }
    public  void setId(Guid id){
        if(loginConfigs == null){
            loginConfigs = new LoginConfigs();
        }
        loginConfigs.setId(id);
    }
    public String getName(){
        return loginConfigs == null ? null : loginConfigs.getRoleName();
    }
    public void setName(String name){
        if(loginConfigs == null){
            loginConfigs = new LoginConfigs();
        }else {
            loginConfigs.setRoleName(name);
        }
    }
    public LoginConfigs getLoginConfigs(){
        return loginConfigs;
    }
    public void setLoginConfigs(LoginConfigs loginConfigs){
        this.loginConfigs = loginConfigs;
    }
}

添加操作的參數(shù)類

public class AddLoginConfigsParameters extends LoginConfigsOperationParameters{
    private static final long serialVersionUID = -7832310521101821905L;

    public AddLoginConfigsParameters(LoginConfigs loginConfigs){
        super(loginConfigs);
    }
}

獲取所有登錄策略的查詢類

public class GetAllLoginConfigsQuery 

extends QueriesCommandBase

{ public GetAllLoginConfigsQuery(P parameters) { super(parameters); } @Override protected void executeQueryCommand() { getQueryReturnValue().setReturnValue(getDbFacade().getLoginConfigsDao().getAll()); } }

添加登錄限制策略的命令類

public class AddLoginConfigsCommand  extends AbstractCommand {
    public AddLoginConfigsCommand(T parameters, CommandContext cmdContext) {
        super(parameters, cmdContext);
    }

    public AddLoginConfigsCommand(Guid commandId) {
        super(commandId);
    }

    @Override
    protected void executeCommand() {
        DbFacade dbFacade = DbFacade.getInstance();
        getParameters().setId(Guid.newGuid());
        DbUser user = getCurrentUser();
        LoginConfigs configs = getParameters().getLoginConfigs();
        if (configs == null) {
            setSucceeded(false);
            return;
        }
        String roleName = configs.getRoleName() == null ? "" : configs.getRoleName();
        if (user != null) {
            if (user.getLoginName().equals("systemAdmin")) {
                setSucceeded(false);
            } else if (user.getLoginName().equals("securityAdmin")) {
                //保密員配置普通用戶角色的登錄策略
                if (roleName.contains("SystemAdmin") || roleName.contains("AuditAdmin")|| roleName.contains("UserRole")) {
                    dbFacade.getLoginConfigsDao().save(configs);
                    setSucceeded(true);
                }
            } else if (user.getLoginName().equals("auditAdmin")) {
                if (roleName.contains("SecurityAdmin")) {
                    dbFacade.getLoginConfigsDao().save(configs);
                    setSucceeded(true);
                }
            }
        } else {
            setSucceeded(false);
        }
    }
//檢測(cè)權(quán)限
    @Override
    public List getPermissionCheckSubjects() {
        return Collections.singletonList(new PermissionSubject(Guid.SYSTEM,
                VdcObjectType.System, ActionGroup.LOGIN_CONFIG));
    }
//記錄日志
    @Override
    public AuditLogType getAuditLogTypeValue() {
        return getSucceeded() ? AuditLogType.ADD_LOGIN_CONFIGS
                : AuditLogType.ADD_LOGIN_CONFIGS_ERROR;
    }
}

VdcQueryType.java 對(duì)新增的查詢類添加對(duì)應(yīng)的枚舉類

    GetAllLoginConfigs(RoleType.USER),
    GetLoginConfigById(RoleType.USER),
    GetLoginConfigByName(RoleType.USER),

VdcActionType 對(duì)新增的命令類添加對(duì)應(yīng)的枚舉類

    AddLoginConfigs(8004,ActionGroup.LOGIN_CONFIG,false,QuotaDependency.NONE),
    UpdateLoginConfigs(8005,ActionGroup.LOGIN_CONFIG,false,QuotaDependency.NONE),
    RemoveLoginConfigs(8006,ActionGroup.LOGIN_CONFIG,false,QuotaDependency.NONE),

ActionGroup 與角色權(quán)限有關(guān)

LOGIN_CONFIG(1701,RoleType.USER, false),
Rest接口層

BackendLoginConfigsResource 主資源實(shí)現(xiàn)類
BackendLoginConfigResource 子資源實(shí)現(xiàn)類
BackendApiResource 后臺(tái)應(yīng)用類,用于分發(fā)請(qǐng)求
LoginConfigsResource 主資源接口類
LoginConfigResource 子資源接口類
SystemResource
LoginConfigsResource 主資源

@Produces(ApiMediaType.APPLICATION_JSON)
public interface LoginConfigsResource {
    @POST
    @Consumes(ApiMediaType.APPLICATION_JSON)
    default Response add(LoginConfigs loginConfigs) {
        throw new UnsupportedOperationException();
    }

    @GET
    default List list() {
        throw new UnsupportedOperationException();
    }

    @POST
    @Consumes(ApiMediaType.APPLICATION_JSON)
    @Path("getByname")
    default LoginConfigs getByName (LoginConfigs loginConfigs) {
        throw new UnsupportedOperationException();
    }

    @Path("{id}")
    LoginConfigResource getLoginConfigResource(@PathParam("id") String id);
}

LoginConfigResource 子資源

@Produces({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON})
public interface LoginConfigResource {
    @DELETE
    default Response remove() {
        throw new UnsupportedOperationException();
    }

    @GET
    default LoginConfigs get() {
        throw new UnsupportedOperationException();
    }

    @PUT
    @Consumes(ApiMediaType.APPLICATION_JSON)
    default LoginConfigs update(LoginConfigs loginConfigs) {
        throw new UnsupportedOperationException();
    }
}

BackendLoginConfigsResource 主資源實(shí)現(xiàn)類

public class BackendLoginConfigsResource extends BackendResource implements LoginConfigsResource {
    @Override
    public Response add(LoginConfigs loginConfigs) {
        return performAction(VdcActionType.AddLoginConfigs,new AddLoginConfigsParameters(loginConfigs));
    }

    @Override
    public List list() {
        VdcQueryReturnValue returnValue = runQuery(VdcQueryType.GetAllLoginConfigs, new VdcQueryParametersBase());
        return returnValue.getReturnValue();
    }

    @Override
    public LoginConfigs getByName(LoginConfigs loginConfigs) {
        String roleName = loginConfigs.getRoleName();
        VdcQueryReturnValue returnValue = runQuery(VdcQueryType.GetLoginConfigByName, sessionize(new NameQueryParameters(roleName)));
        return returnValue.getReturnValue();
    }

    @Override
    public LoginConfigResource getLoginConfigResource(String id) {
        return inject(new BackendLoginConfigResource(id));
    }
}

BackendLoginConfigsResource 子資源實(shí)現(xiàn)類

public class BackendLoginConfigResource extends BackendResource implements LoginConfigResource{
    protected Guid id;

    public BackendLoginConfigResource(String id){
        this.id = asGuid(id);
    }

    @Override
    public Response remove(){
        return performAction(VdcActionType.RemoveLoginConfigs,new RemoveLoginConfigsParameters(id));
    }

    @Override
    public LoginConfigs get(){
        VdcQueryReturnValue returnValue = runQuery(VdcQueryType.GetLoginConfigById, sessionize(new IdQueryParameters(id)));
        return returnValue.getReturnValue();
    }

    @Override
    public LoginConfigs update(LoginConfigs loginConfigs) {
        loginConfigs.setId(this.id);
        Response response = performAction(VdcActionType.UpdateLoginConfigs,new UpdateLoginConfigsParameters(loginConfigs));
        if (response.getStatus() == 200) {
            return runQuery(VdcQueryType.GetLoginConfigById, sessionize(new IdQueryParameters(id))).getReturnValue();
        }
        return null;
    }
}

systemResource

@Path("/")
@Produces(MediaType.APPLICATION_JSON)
public interface SystemResource {
@Path("loginConfigs")
    LoginConfigsResource getLoginConfigsResource();
....
}

至此登錄限制策略的后臺(tái)接口已完成,可通過loginconfigs接口對(duì)登錄策略進(jìn)行增刪改查。這樣實(shí)現(xiàn)起來簡單明了,不過由于是根據(jù)角色定義登錄限制策略,同一種角色只有一種登錄限制策略,對(duì)不同用戶暫時(shí)不能做到多樣性控制,后期再修正。還有就是有多條限制策略時(shí)都存在同一張表的同一個(gè)字段中,前臺(tái)需做一些處理。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/38996.html

相關(guān)文章

  • ovirt筆記:通過登錄策略配置模塊熟悉系統(tǒng)框架

    摘要:最近在寫登錄策略配置模塊,現(xiàn)在通過分析登錄策略配置模塊來說明系統(tǒng)的層次結(jié)構(gòu)。這樣實(shí)現(xiàn)起來簡單明了,不過由于是根據(jù)角色定義登錄限制策略,同一種角色只有一種登錄限制策略,對(duì)不同用戶暫時(shí)不能做到多樣性控制,后期再修正。 最近在寫登錄策略配置LoginConfig模塊,現(xiàn)在通過分析登錄策略配置模塊來說明系統(tǒng)的層次結(jié)構(gòu)。系統(tǒng)后臺(tái)主要包括四層: 1. 數(shù)據(jù)庫層:包括表、存儲(chǔ)過程、實(shí)體類 2. 數(shù)據(jù)...

    ?xiaoxiao, 評(píng)論0 收藏0
  • ovirt筆記:基于ovirt4.0虛擬資源管理權(quán)限分析

    摘要:前言虛擬資源管理平臺(tái)是在的基礎(chǔ)上開發(fā)的,從原有的一個(gè)用戶擴(kuò)展成三個(gè)管理員用戶和普通用戶,下面簡單分析一下其實(shí)現(xiàn)權(quán)限管理的原理。 前言 虛擬資源管理平臺(tái)是在ovirt4.0的基礎(chǔ)上開發(fā)的,從原有的一個(gè)admin用戶擴(kuò)展成三個(gè)管理員用戶和普通用戶,下面簡單分析一下其實(shí)現(xiàn)權(quán)限管理的原理。 數(shù)據(jù)庫表 主要包括三張表:roles(角色表)、roles_group(角色與操作組關(guān)系表)、permi...

    Gilbertat 評(píng)論0 收藏0
  • Android框架 - 收藏集 - 掘金

    摘要:說好的分類集合來啦,采用標(biāo)簽云的方式來展示掘金閱讀提示點(diǎn)擊下文中返回到頂部有分類不合理的地方請(qǐng)?zhí)帷7淳幾g這個(gè)后發(fā)現(xiàn)其使用個(gè)優(yōu)質(zhì)的開源項(xiàng)目掘金是由的開源的一個(gè)庫,用于構(gòu)建可預(yù)期的和聲明式的用戶界面。 想不想通過一線互聯(lián)網(wǎng)公司面試? - Android - 掘金國內(nèi)一線互聯(lián)網(wǎng)公司內(nèi)部面試題庫 以下面試題來自于百度、小米、樂視、美團(tuán)、58、獵豹、360、新浪、搜狐內(nèi)部題庫 熟悉本文中列出的知...

    zengdongbao 評(píng)論0 收藏0
  • TOP100summit:【分享實(shí)錄-封宇】58到家多端消息整合之路

    摘要:封宇到家架構(gòu)師。主要負(fù)責(zé)到家消息系統(tǒng)以及門戶等公司戰(zhàn)略級(jí)產(chǎn)品研發(fā)。消息服務(wù)器收到拉取離線消息請(qǐng)求,表明端已經(jīng)收到之前的數(shù)據(jù)。統(tǒng)一消息推送通道,整合個(gè)推米推微信短信等消息推送方式,盡最大可能確保消息送達(dá)用戶。 本篇文章內(nèi)容來自2016年TOP100summit 58到家架構(gòu)師封宇的案例分享。編輯:Cynthia2017年11月9-12日北京國家會(huì)議中心第六屆TOP100summit,留言...

    googollee 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<