17,382
社区成员




SELECT f.* FROM COM_FUNC f
JOIN COM_FUNC_PRIV fp ON fp.FUNC_ID=f.ID
WHERE fp.USER_ID=:userID
UNION
SELECT f.* FROM COM_FUNC f
JOIN COM_FUNC_PRIV fp ON fp.FUNC_ID=f.ID
JOIN COM_ROLE_USER ru ON ru.ROLE_ID=fp.ROLE_ID
WHERE ru.USER_ID=:userID
UNION
SELECT f.* FROM COM_FUNC f
JOIN COM_FUNC_PRIV fp ON fp.FUNC_ID=f.ID
JOIN COM_DEPT_USER du ON du.DEPT_ID=fp.DEPT_ID
WHERE du.USER_ID=:userID
SELECT f.* FROM COM_FUNC f
JOIN COM_FUNC_PRIV fp1 ON fp1.FUNC_ID=f.ID
JOIN COM_FUNC_PRIV fp2 ON fp2.FUNC_ID=f.ID
JOIN COM_ROLE_USER ru ON ru.ROLE_ID=fp2.ROLE_ID
JOIN COM_FUNC_PRIV fp3 ON fp3.FUNC_ID=f.ID
JOIN COM_DEPT_USER du ON du.DEPT_ID=fp3.DEPT_ID
WHERE ru.USER_ID=:userID OR du.USER_ID=:userID
SELECT f.* FROM COM_FUNC f
JOIN COM_FUNC_PRIV fp1 ON fp1.FUNC_ID=f.ID
JOIN COM_FUNC_PRIV fp2 ON fp2.FUNC_ID=f.ID
JOIN COM_ROLE_USER ru ON ru.ROLE_ID=fp2.ROLE_ID
JOIN COM_FUNC_PRIV fp3 ON fp3.FUNC_ID=f.ID
JOIN COM_DEPT_USER du ON du.DEPT_ID=fp3.DEPT_ID
WHERE fp1.USER_ID=:userID OR ru.USER_ID=:userID OR du.USER_ID=:userID
--功能权限表
CREATE TABLE COM_FUNC_PRIV
(
ID INTEGER NOT NULL PRIMARY KEY,
FUNC_ID INTEGER NOT NULL REFERENCES COM_FUNC(ID) ON DELETE CASCADE,
USER_ID INTEGER REFERENCES COM_USER(ID) ON DELETE CASCADE,
ROLE_ID INTEGER REFERENCES COM_ROLE(ID) ON DELETE CASCADE,
DEPT_ID INTEGER REFERENCES COM_DEPT(ID) ON DELETE CASCADE
);
CREATE SEQUENCE SEQ_COM_FUNC_PRIV_ID;
--注释
COMMENT ON TABLE COM_FUNC_PRIV IS '功能权限表';
COMMENT ON COLUMN COM_FUNC_PRIV.ID IS '功能权限编号';
COMMENT ON COLUMN COM_FUNC_PRIV.FUNC_ID IS '功能编号';
COMMENT ON COLUMN COM_FUNC_PRIV.USER_ID IS '已授权的用户编号,互斥字段,优先级高';
COMMENT ON COLUMN COM_FUNC_PRIV.ROLE_ID IS '已授权的角色编号,互斥字段,优先级中';
COMMENT ON COLUMN COM_FUNC_PRIV.DEPT_ID IS '已授权的部门编号,互斥字段,优先级低';
/// <summary>
/// 功能权限表。数据库表“COM_FUNC_PRIV”对应的实体类型。
/// </summary>
[Table("COM_FUNC_PRIV")]
public partial class ComFuncPriv
{
#region 实体属性
/// <summary>
/// 功能权限编号。
/// </summary>
[Column(true), OracleSequence]
public int ID { get; set; }
/// <summary>
/// 获取表“COM_FUNC_PRIV”的“ID”下一个序列值,值来自序列“SEQ_COM_FUNC_PRIV_ID”。
/// </summary>
/// <param name="engine">查询引擎对象。</param>
/// <returns>返回一个结果。</returns>
public static Result<int> NextSequence(IQueryEngine engine)
{
var r = engine.Execute("SELECT SEQ_COM_FUNC_PRIV_ID.NEXTVAL FROM DUAL").ToScalar();
if(r.IsFailed) return r.Exception;
return Convert.ToInt32(r);
}
/// <summary>
/// 功能编号。
/// </summary>
[Column("FUNC_ID")]
public int FuncID { get; set; }
/// <summary>
/// 已授权的用户编号,互斥字段,优先级高。
/// </summary>
[Column("USER_ID")]
public int? UserID { get; set; }
/// <summary>
/// 已授权的角色编号,互斥字段,优先级中。
/// </summary>
[Column("ROLE_ID")]
public int? RoleID { get; set; }
/// <summary>
/// 已授权的部门编号,互斥字段,优先级低。
/// </summary>
[Column("DEPT_ID")]
public int? DeptID { get; set; }
#endregion
}
SELECT f.* FROM COM_FUNC f
WHERE EXISTS(SELECT 1 FROM COM_FUNC_PRIV fp1 WHERE fp1.FUNC_ID=f.ID AND fp1.USER_ID=:userID)
OR EXISTS(SELECT 1 FROM COM_FUNC_PRIV fp2 JOIN COM_ROLE_USER ru ON ru.ROLE_ID=fp2.ROLE_ID WHERE fp2.FUNC_ID=f.ID AND ru.USER_ID=:userID)
OR EXISTS(SELECT 1 FROM COM_FUNC_PRIV fp3 JOIN COM_DEPT_USER du ON du.DEPT_ID=fp3.DEPT_ID WHERE fp3.FUNC_ID=f.ID AND du.USER_ID=:userID)